Giới thiệu Overview về AngularJS, Yeoman

QSoft Vietnam
QSoft VietnamQSoft Vietnam
Giới thiệu về
AngularJS & Yeoman
TỔNG QUAN & CÁCH SỬ DỤNG ANGULARJS +
YEOMAN ĐỂ XÂY DỰNG SPA
Người trình bày: Đỗ Nam Khánh
Technical Lead @ QSoft Vietnam Corporation
khanhdn@qsoftvietnam.com

Saturday, 09 November 2013

www.qsoftvietnam.com

1
NỘI DUNG
• GIỚI THIỆU VỀ ANGULARJS
•
•

ANGULARJS LÀ GÌ?
CÁC ĐẶC TRƯNG CỦA ANGULARJS

• GIỚI THIỆU VỀ YEOMAN
•
•
•

YO
GRUNT
BOWER

• CASE STUDY: XÂY DỰNG ỨNG DỤNG QUẢN LÝ NGƯỜI DÙNG
• DEMO
•
•
•

GENERATE SKELETON APP
PREVIEW APPLICATION WITH BUILT-IN SERVER
BUILD & DEPLOY APPLICATION

Saturday, 09 November 2013

www.qsoftvietnam.com

2
Client Technology Stack

Saturday, 09 November 2013

www.qsoftvietnam.com

3
SPA???
Saturday, 09 November 2013

www.qsoftvietnam.com

4
SPA = Single Page Application
•

MỘT SING-PAGE APP, HAY CÒN ĐƯỢC GỌI LÀ SINGLE-PAGE INTERFACE, LÀ MỘT WEB
APP HAY WEBSITE HIỂN THỊ VỪA VẶN TRÊN MỘT MẶT TRANG WEB, VỚI MỤC ĐÍCH LÀ
GIÚP USER CÓ TRẢI NGHIỆM GIỐNG NHƯ ĐANG DÙNG ỨNG DỤNG TRÊN DESKTOP.

•

LÀ ỨNG DỤNG CHẠY BÊN TRONG TRÌNH DUYỆT, KHÔNG YÊU CẦU PHẢI RELOAD LẠI
TOÀN BỘ TRANG WEB MỖI LẦN SỬ DỤNG

Saturday, 09 November 2013

www.qsoftvietnam.com

5
AngularJS là gì?
• Là một MVC framework dành cho các ứng dụng chạy trên nền
browser
• Được phát triển từ năm 2009 bởi Miško Hevery và Adam
Abrons
• Sau khi Abrons rời khỏi dự án, Hevery cùng Igor Minár and Vojta Jína
đã tiếp tục phát triển & trở thành dự án chính thức được Google hỗ trợ

• Phiên bản 1.0 được đưa ra vào tháng 6 năm 2012
• Mục tiêu: để xây dựng các ứng dụng nghiệp vụ theo style
CRUD
• Được xây dựng với tư tưởng hướng đến việc testing.
• Sử dụng một phần của jQuery để thao tác với DOM - jqLite
Saturday, 09 November 2013

www.qsoftvietnam.com

6
Mục đích thiết kế
• Tách các thao tác với DOM ra khỏi application logic. Cải thiện
khả năng test của mã nguồn.
• Coi việc kiểm thử quan trọng như việc viết mã nguồn. Khó
khăn trong việc kiểm thử bị ảnh hưởng đáng kể bởi việc tổ
chức code.
• Tách riêng phần xử lý ở client của ứng dụng ra khỏi phần xử
lý phía server. Điều này cho phép việc phát triển diễn ra song
song và cho phép tái sử dụng ở cả hai phía.
• Hướng dẫn các developer từ A-Z trong toàn bộ quá trình xây
dựng ứng dụng: từ thiết kế UI, viết business logic, cho đến
testing.
Saturday, 09 November 2013

www.qsoftvietnam.com

7
Tại sao nên sử dụng AngularJS?
• Các thẻ HTML có sẵn vẫn chưa đáp ứng đủ
•
•
•
•

Rich text
Date picker
Cấu trúc lặp cho các nội dung động
...

• HTML được xây dựng cho mục đích hiển thị các dữ liệu tĩnh
• AngularJS làm cho HTML trở nên"động"

• Giúp các team khác nhau có thể cùng làm việc song song
• Front-end team: HTML, CSS, Javascript, AngularJS...
• Back-end team: PHP API...

Saturday, 09 November 2013

www.qsoftvietnam.com

8
Các đặc trưng của AngularJS
•
•
•
•
•
•

Kiến trúc MVC
Two-way binding
Dynamic templates
Expressions
Modules
Scopes

Saturday, 09 November 2013

•
•
•
•
•
•
•

Dependency injection
Directives
Routing
Services
Filters
Form validation
Testing in mind

www.qsoftvietnam.com

9
Kiến trúc MVC
• Phân tách ứng dụng ra các thành phần presentation,
data, & logic
• Khuyến khích loose coupling giữa các thành phần
này
• Cùng với services và “dependency injection”, MVC
giúp các app Angular có tính cấu trúc tốt hơn, dễ bảo
trì và dễ test hơn.

Saturday, 09 November 2013

www.qsoftvietnam.com

10
MVVM & MVW
• Sau nhiều lần refactorings và cải tiến API thì kiến
trúc của AngularJS đã trở nên gần hơn với MVVM
• $scope object được xem như là một ViewModel, có
thể được decorate bởi một function, gọi là Controller
• Sau khi chứng kiến nhiều tranh luận vô nghĩa về
MV*, một trong các tác giả framework là Igor Minar
đã tuyên bố AngularJS là một… MVW framework –
Model-View-Whatever.
• Whatever = whatever works for you
Saturday, 09 November 2013

www.qsoftvietnam.com

11
Saturday, 09 November 2013

www.qsoftvietnam.com

12
Two-way binding
• Data-binding trong Angular web apps là việc tự động
đồng bộ hoá dữ liệu giữa model & view components.
• Khi thực hiện data-binding, Angular luôn coi Model
là “Single-Source of Truth” trong app.
• View luôn luôn là thành phần hiển thị ra ngoài của
Model. Khi Model thay đổi, View cũng thay đổi
theo, và ngược lại.

Saturday, 09 November 2013

www.qsoftvietnam.com

13
Two-way binding

Saturday, 09 November 2013

www.qsoftvietnam.com

14
jQuery way:

Saturday, 09 November 2013

www.qsoftvietnam.com

15
AngularJS way:

Saturday, 09 November 2013

www.qsoftvietnam.com

16
Dynamic templates
• Angular template là 1 đặc tả dạng declarative (khai
báo), cùng với thông tin từ model & controller, trở
thành rendered view mà user thấy trên mặt browser.
Nó là static DOM, chứa HTML, CSS, và các thành
phần, thuộc tính của riêng Angular. Các thành phần
Angular và các thuộc tính giúp angular thêm các
hành vi và biến đổi template DOM thành dynamic
view DOM
• Nói 1 cách đơn giản nhất thì Template trong
AngularJS là “HTML với additional markup”
Saturday, 09 November 2013

www.qsoftvietnam.com

17
Dynamic templates

Output:
• web
• element
• #14

Saturday, 09 November 2013

www.qsoftvietnam.com

18
Expressions
• Là các snippets giống JS được đặt trong
bindings, kiểu như {{expression}}.
• Được xử lý bởi $parse service
• Ex: <body> 1 + 2 = {{1+2}} </body>

Saturday, 09 November 2013

www.qsoftvietnam.com

19
Scopes
• Là object trong application model
• Là phần gắn kết giữa View và Controller
• Scope cung cấp các APIs để theo dõi các thay đổi
của Model: $watch
• Scope cung cấp các APIs để truyền bất kỳ thay đổi
nào của Model tới View: $apply
• Tự động đồng bộ dữ liệu giữa Model và View

Saturday, 09 November 2013

www.qsoftvietnam.com

20
Scopes

Saturday, 09 November 2013

www.qsoftvietnam.com

21
Scopes

Saturday, 09 November 2013

www.qsoftvietnam.com

22
Scopes

Saturday, 09 November 2013

www.qsoftvietnam.com

23
Dependence Injection
• AngularJS sử dụng DI để tách biệt các modules
• Các dependency được đưa vào tự động bởi
framework

Saturday, 09 November 2013

www.qsoftvietnam.com

24
Dependency Annotation
• Inferring Dependencies
• $inject Annotation
• Inline Annotation

Saturday, 09 November 2013

www.qsoftvietnam.com

25
Inferring Dependencies

Saturday, 09 November 2013

www.qsoftvietnam.com

26
$inject Annotation

Saturday, 09 November 2013

www.qsoftvietnam.com

27
$inject API
• $injector.get(name): Return an instance of the service.
• $injector.has(Name):Allows the user to query if the
particular service exist.
• $injector.instantiate(Type, locals): Create a new instance of
JS type.
• $injector.invoke(fn, self, locals): Invoke the method and
supply the method arguments from the $injector.

Saturday, 09 November 2013

www.qsoftvietnam.com

28
Inline Annotation

Saturday, 09 November 2013

www.qsoftvietnam.com

29
Dependence Injection
• Bất cứ function nào được gọi với $injector.invoke đều có thể
được inject
• Mặc định bao gồm:
•
•
•
•
•
•
•

controller
directive
factory
filter
provider $get (khi định nghĩa provider như là một object)
provider function (khi định nghĩa provider như làm một hàm khởi tạo)
service

Saturday, 09 November 2013

www.qsoftvietnam.com

30
Directives
• Là các tuỳ biến gắn vào các DOM (attribute, element
name, CSS class…) để HTML compiler của
AngularJS có thể thêm vào hoặc biến đổi DOM
element.
• Các loại directive
•
•
•
•

E - Element: <my-directive></my-directive>
A - Attribute: <div my-directive="exp"></div>
C - Class: <div class="my-directive: exp;"></div>
M - Comment: <!-- directive: my-directive exp -->

Saturday, 09 November 2013

www.qsoftvietnam.com

31
Built-in Directives
•
•
•
•
•
•
•
•
•
•
•
•
•

ngApp
ngBind
ngBindHtml
ngBindTemplate
ngBlur
ngChange
ngChecked
ngClass
ngClassEven
ngClassOdd
ngClick
ngCloak
ngController

Saturday, 09 November 2013

•
•
•
•
•
•
•
•
•
•
•
•
•

ngCopy
ngCsp
ngCut
ngDblclick
ngDisabled
ngFocus
ngForm
nghide
ngHref
ngIf
ngInclude
ngInit
ngKeydown

www.qsoftvietnam.com

•
•
•
•
•
•
•
•
•
•
•
•
•

ngKeypress
ngKeyup
ngList
ngModel
ngMousedown
ngMouseenter
ngMouseleave
ngMousemove
ngMouseover
ngMouseup
ngNonBindable
ngOpen
ngPaste

•
•
•
•
•
•
•
•
•
•
•
•

ngPluralize
ngReadonly
ngRepeat
ngSelected
ngShow
ngSrc
ngSrcset
ngStyle
ngSubmit
ngSwitch
ngTransclude
ngValue

32
Ví dụ về directive
• http://jsfiddle.net/abhiroop/G3UCK/1/light/
• http://jsfiddle.net/donamkhanh/4YEG6/

Saturday, 09 November 2013

www.qsoftvietnam.com

33
Routing
•
•
•
•
•

Dùng để tạo các app theo kiểu SPA (Single Page Application)
ngView thường được dùng để render template
$routeProvider service được dùng để cấu hình route
$location service dùng cho navigate
$routeParams service dùng để nhận các param

Saturday, 09 November 2013

www.qsoftvietnam.com

34
Route Events
•
•
•
•

$routeChangeError
$routeChangeStart
$routeChangeSuccess
$routeUpdate

Saturday, 09 November 2013

www.qsoftvietnam.com

35
$location service configuration
Để cấu hình $location service, cần sử dụng $locationProvider
thiết lập các tham số như sau:
• html5Mode(mode): {boolean}
• true - see HTML5 mode
• false - see Hashbang mode
• default: false

• hashPrefix(prefix): {string}
• prefix used for Hashbang URLs (used in Hashbang mode or in legacy
browser in Html5 mode)
• default: ""

Saturday, 09 November 2013

www.qsoftvietnam.com

36
Example configuration
$locationProvider.html5Mode(true);
http://example.com/hello-world
$locationProvider.html5Mode(true).hashPrefix('!');
http://example.com/!/hello-world
$locationProvider.html5Mode(false);
http://example.com/#/hello-world
$locationProvider.html5Mode(false).hashPrefix('!');
http://example.com/#!/hello-world

Saturday, 09 November 2013

www.qsoftvietnam.com

37
$location methods
•
•
•
•
•
•
•
•
•

absUrl()
hash(hash)
host()
path(path)
port()
protocol()
replace()
search(search, paramValue)
url(url, replace)

Saturday, 09 November 2013

www.qsoftvietnam.com

38
$location events
• $locationChangeStart
• $locationChangeSuccess

Saturday, 09 November 2013

www.qsoftvietnam.com

39
Services
•
•
•
•

Services là các phần dùng lại được của business logic
Được tạo dưới dạng các singleton object
Services là một phần của module
Modules là nhóm các chức năng

Saturday, 09 November 2013

www.qsoftvietnam.com

40
Các loại services
•
•
•
•
•

Constant
Value
Factory
Service
Provider

Saturday, 09 November 2013

www.qsoftvietnam.com

41
Constant service
• Là một service hữu dụng thường được dùng để cung cấp các
cấu hình mặc định trong directive
• Sử dụng như hằng số, các giá trị trong constant service sẽ
không thể thay đổi được

Saturday, 09 November 2013

www.qsoftvietnam.com

42
Value service
• Tương tự như consant service, chỉ khác ở chỗ là ta có thể thay
đổi được giá trị

Saturday, 09 November 2013

www.qsoftvietnam.com

43
Service Factory
• Là một service được sử dụng nhiều nhất & cũng là khái niệm
dễ hiểu nhất.
• Là một service mà có thể trả về bất cứ kiểu dữ liệu nào. Không
cần biết làm thế nào để tạo ra đối tượng, bạn chỉ cần quan tâm
đến việc trả về cái gì.

Saturday, 09 November 2013

www.qsoftvietnam.com

44
Service
• Hoạt động gần giống như Factory
• Service nhận về một constructor, do
đó khi sử dụng lần đầu tiên nó sẽ
thực hiên new Foo() để khởi tạo đối
tượng

Saturday, 09 November 2013

www.qsoftvietnam.com

45
Service Provider
• Service provider names bắt đầu bằng tên của service + hậu tố
Provider.
• app.provider('foo', function() {…})
• app.config(function(fooProvider) {…})

• Một service provider phải có $get function để có thể inject vào
các thành phần khác trong ứng dụng

Saturday, 09 November 2013

www.qsoftvietnam.com

46
Service Provider

Saturday, 09 November 2013

www.qsoftvietnam.com

47
Filters
• Định dạng dữ liệu để hiển thị cho user.
• Theo tinh thần của UNIX filters và sử dụng các cú pháp tương
tự | (pipe)
• Built-in filters
•
•
•
•
•
•
•
•

currency
date
json
limitTo
lowercase
uppercase
orderBy
number

Saturday, 09 November 2013

www.qsoftvietnam.com

48
Form validation
• Controls (input, select, textarea) là các cách users nhập data
• Form là 1 tập các controls với mục đích nhóm các controls liên
quan đến nhau
• Form và controls cung cấp các validation services, để users
được báo các lỗi liên quan đến nhập dữ liệu
• Server-side validation cũng cần thiết để đảm bảo độ an toàn
của app.
• Sử dụng thuộc tính “novalidate” để tắt chức năng validation
mặc định của trình duyệt

Saturday, 09 November 2013

www.qsoftvietnam.com

49
Form validation
• CSS Classes:
• ng-valid: class được add vào element nếu valid
• ng-invalid: class được add vào element nếu invalid
• ng-pristine: class được add vào element lúc ban đầu, trước khi
AngularJS xử lý validation
• ng-dirty: class được add vào element khi AngularJS xử lý validation

Saturday, 09 November 2013

www.qsoftvietnam.com

50
Form validation
• Custom Validation:
• Angular cung cấp các xử lý cơ bản cho hầu hết các kiểu input html5:
(text, number, url, email, radio, checkbox) kèm directives để validate
(required, pattern, minlength, maxlength, min, max)
• Có thể tự đưa ra validate riêng bằng cách tự tạo directive để đưa hàm
validate của mình vào ngModel controller

Saturday, 09 November 2013

www.qsoftvietnam.com

51
Form validation
• Validation có thể xuất hiện ở 2 chỗ:
• Model to View update: khi model thay đổi, tất cả các hàm trong
NgModelController#$formatters array được pipe-lined, để mỗi hàm
này có thể format được value và thay đổi trạng thái valid của form
control thông qua NgModelController#$setValidity.
• View to Model update: tương tự như vậy, khi user tương tác với 1
control, nó gọi NgModelController#$setViewValue. Nó sẽ pipeline
tất cả các hàm trong NgModelController#$parsers array, để mỗi hàm
này lần lượt convert value và trạng thái thay đổi của form control
thông qua NgModelController#$setValidity.

Saturday, 09 November 2013

www.qsoftvietnam.com

52
Giới thiệu về Yeoman
• Gồm 3 ứng dụng:
• Yo
• Grunt
• Bower

• Yeoman không chỉ là tool mà còn được sử dụng như là 1
workflow, tập hợp các "best practices" để giúp cho việc phát
triển web dễ dàng hơn

Saturday, 09 November 2013

www.qsoftvietnam.com

53
Yeoman features
• Lightning-fast scaffolding
• Dễ dàng tạo khung cho những dự án mới với các template tuỳ biến
được (vd: HTML5 Boilerplate, Bootstrap), AngularJS v.v…

• Great build process
• Minification and concatenation (thu nhỏ và cố kết ?)
• Tối ưu tất cả image files, HTML
• Compile CoffeeScript and Compass files

• Automatically lint your scripts
• Tất cả scripts đều được tự động chạy qua JSHint để đảm bảo nó tuân
theo những best-practices.

Saturday, 09 November 2013

www.qsoftvietnam.com

54
Yeoman features
• Built-in preview server
• Tối ưu ảnh cực tốt
• Dùng OptiPNG và JPEGTran

• Package management cực ngon
• Dễ dàng search được packages mới thông qua command-line, cài đặt
và update chúng mà không cần mở browser.

• PhantomJS Unit Testing
• Dễ dàng chạy unit tests trong WebKit thông qua PhantomJS.

Saturday, 09 November 2013

www.qsoftvietnam.com

55
Workflow without Yeoman
1.
2.
3.
4.
5.
6.
7.
8.
9.

Tìm HTML Boilerplate
Download & add vào project
Tìm UI Boilerplate
Download & add vào project
Download project libs, add
Copy boilerplate cho models, views, setup
Setup test runner
Setup build process
Viết code!

Saturday, 09 November 2013

www.qsoftvietnam.com

56
Yeoman workflow

Saturday, 09 November 2013

www.qsoftvietnam.com

57
Yeoman workflow
Includes:
• HTML5 Boilerplate
• Twitter Bootstrap
• AngularJS
• Karma Testrunner
• Scaffolding for
Models, Directives, Routes, Views, Values, Constants, Service
s, Factories, ...
• DI-aware JavaScript minification
• CoffeeScript support
Saturday, 09 November 2013

www.qsoftvietnam.com

58
Tool để tạo khung, lên khung các app mới, tạo config
cho Grunt và đưa vào các task Grunt cần cho build

Saturday, 09 November 2013

www.qsoftvietnam.com

59
AngularJS generator

Saturday, 09 November 2013

www.qsoftvietnam.com

60
AngularJS generator
Available generators:
1. angular (aka angular:app)
2. angular:controller
3. angular:directive
4. angular:filter
5. angular:route
6. angular:service

Saturday, 09 November 2013

7. angular:provider
8. angular:factory
9. angular:value
10. angular:constant
11. angular:decorator
12. angular:view

www.qsoftvietnam.com

61
• Bower là một công cụ quản lý package và các thành phần
phụ thuộc dành cho web.
• Được viết bởi Twitter Inc

Saturday, 09 November 2013

www.qsoftvietnam.com

62
Bower commands
Việc sử dụng Bower chủ yếu thông qua 3 lệnh sau:
1. bower search <package name>
2. bower install <package name>
3. bower uninstall <package name>

Saturday, 09 November 2013

www.qsoftvietnam.com

63
Bower components
• Hiện tại có khoảng 5435 bower components
• http://sindresorhus.com/bower-components

Saturday, 09 November 2013

www.qsoftvietnam.com

64
•
•
•
•

Grunt là tool tự động hoá cho các dự án phát triển web.
Ta có thể minify code, biên dịch, unit test, validate, etc.
Có thể tự động hoá rất nhiều thứ để giảm effort của bạn.
Mở rộng được.

Saturday, 09 November 2013

www.qsoftvietnam.com

65
Grunt tasks (in Yeoman)
• clean: xoá build trước đó
• copy: copy toàn bộ folder staging (intermediate/) sang
(publish/)
• css: gộp các file CSS thành 1 file, thay thế @imports và “nén”
CSS files
• html: tối giản HTML (từ mức đơn giản đến mức tối đa)
• img: tối ưu file .png/.jpg qua OptiPNG/JPEGtran
• mkdirs: chuẩn bị các thư mục build
• rev: tự động rename các file build theo revision
• usemin: thay thế các tham chiếu thành scripts / stylesheets
chưa giản lược
Saturday, 09 November 2013

www.qsoftvietnam.com

66
Case study: User management

https://github.com/donamkhanh/sample-user-management

Saturday, 09 November 2013

www.qsoftvietnam.com

67
Case study: User management
Flow thực hiện bằng jQuery:
• Tạo mockup layout
• Xây dựng server API
• Thao tác với server API
• Phải viết khá nhiều code

Saturday, 09 November 2013

www.qsoftvietnam.com

68
Case study: User management
Flow thực hiện bằng AngularJS:
• Static template
• Angular templates
• XHRs & Dependency injection
• Routing & multiple views
• REST and custom services

Saturday, 09 November 2013

www.qsoftvietnam.com

69
Case study: User management

Generate data: www.generatedata.com
Saturday, 09 November 2013

www.qsoftvietnam.com

70
Demo
• Generate skeleton app
•
•
•
•

yo angular:route hello
yo angular:directive hello
yo angular:controller hello
yo angular:view hello

• Preview application with built-in server
• grunt server

• Build application
• grunt build

Saturday, 09 November 2013

www.qsoftvietnam.com

71
Tài liệu tham khảo
•
•
•
•
•

http://angularjs.org
http://yeoman.io
http://bower.io
http://gruntjs.com
http://angular-tips.com/blog/2013/08/understanding-servicetypes
• http://pivotal.github.io/jasmine
• http://karma-runner.github.io/0.10/index.html

Saturday, 09 November 2013

www.qsoftvietnam.com

72
THANK YOU FOR
YOUR ATTENTION!

Saturday, 09 November 2013

www.qsoftvietnam.com

73
1 of 73

Recommended

Angular js by
Angular jsAngular js
Angular jsThanh An Nguyen
908 views36 slides
Spring mvc by
Spring mvcSpring mvc
Spring mvcBa Big
2.4K views23 slides
Jsf by
JsfJsf
JsfNguyen Tran
2.9K views44 slides
Mô hình MVC trong lập trình web với Java by
Mô hình MVC trong lập trình web với JavaMô hình MVC trong lập trình web với Java
Mô hình MVC trong lập trình web với JavaHuy Vũ
5.5K views20 slides
Mô Hình MVC 3.0 by
Mô Hình MVC 3.0Mô Hình MVC 3.0
Mô Hình MVC 3.0David Nguyen
6.3K views106 slides
Mvc 3 by
Mvc 3Mvc 3
Mvc 3Lê Tài
3.3K views16 slides

More Related Content

Viewers also liked

2016_S_LAA6654_Quintanilla_V_BlurbSubmissionPDF_OZER by
2016_S_LAA6654_Quintanilla_V_BlurbSubmissionPDF_OZER2016_S_LAA6654_Quintanilla_V_BlurbSubmissionPDF_OZER
2016_S_LAA6654_Quintanilla_V_BlurbSubmissionPDF_OZERValeria Quintanilla Florián
134 views42 slides
4月23日説明会 by
4月23日説明会4月23日説明会
4月23日説明会tetsuro ooki
233 views2 slides
Verkostoituminen by
VerkostoituminenVerkostoituminen
VerkostoituminenEetu Kirsi
440 views14 slides
Jquery for post a form by
Jquery for post a formJquery for post a form
Jquery for post a formRakesh Kumar
621 views2 slides
Alert centraladminguide by
Alert centraladminguideAlert centraladminguide
Alert centraladminguideArturo Salgado
1K views117 slides
Automated Test Design: Single Use Vs Reusable Tests by
Automated Test Design: Single Use Vs Reusable TestsAutomated Test Design: Single Use Vs Reusable Tests
Automated Test Design: Single Use Vs Reusable TestsJosh Grant
549 views58 slides

Viewers also liked(20)

Verkostoituminen by Eetu Kirsi
VerkostoituminenVerkostoituminen
Verkostoituminen
Eetu Kirsi440 views
Jquery for post a form by Rakesh Kumar
Jquery for post a formJquery for post a form
Jquery for post a form
Rakesh Kumar621 views
Automated Test Design: Single Use Vs Reusable Tests by Josh Grant
Automated Test Design: Single Use Vs Reusable TestsAutomated Test Design: Single Use Vs Reusable Tests
Automated Test Design: Single Use Vs Reusable Tests
Josh Grant549 views
OnSync Manual Account Holders and Moderators by Robert Strobl
OnSync Manual Account Holders and ModeratorsOnSync Manual Account Holders and Moderators
OnSync Manual Account Holders and Moderators
Robert Strobl1.3K views
Are you and your computer guy praying 3 by Phil Hutchins
Are you and your computer guy praying 3Are you and your computer guy praying 3
Are you and your computer guy praying 3
Phil Hutchins389 views
Enhance your Web Presence by Readyportal
Enhance your Web PresenceEnhance your Web Presence
Enhance your Web Presence
Readyportal328 views
Season's Greetings by TCM infosys
Season's GreetingsSeason's Greetings
Season's Greetings
TCM infosys433 views
Design is... by Anh Cao
Design is...Design is...
Design is...
Anh Cao410 views
Inception Product Feature Webinar: Workflow, Versioning & Restore by Marco Makfab
Inception Product Feature Webinar: Workflow, Versioning & RestoreInception Product Feature Webinar: Workflow, Versioning & Restore
Inception Product Feature Webinar: Workflow, Versioning & Restore
Marco Makfab505 views
Amir33202057 2013 03-17-19-06-07 by Dushyant Kumar
Amir33202057 2013 03-17-19-06-07Amir33202057 2013 03-17-19-06-07
Amir33202057 2013 03-17-19-06-07
Dushyant Kumar206 views
SFPUC and DataSplice Mobile for Maximo by DataSplice
SFPUC and DataSplice Mobile for MaximoSFPUC and DataSplice Mobile for Maximo
SFPUC and DataSplice Mobile for Maximo
DataSplice736 views

Similar to Giới thiệu Overview về AngularJS, Yeoman

ITLC - Hanoi - NodeJS - ArrowJS - 27-11 - 2015 by
ITLC - Hanoi - NodeJS - ArrowJS - 27-11 - 2015ITLC - Hanoi - NodeJS - ArrowJS - 27-11 - 2015
ITLC - Hanoi - NodeJS - ArrowJS - 27-11 - 2015IT Expert Club
2K views97 slides
Arrowjs.io by
Arrowjs.ioArrowjs.io
Arrowjs.ioTechMaster Vietnam
4.4K views97 slides
Giao Trinh Jquery by
Giao Trinh JqueryGiao Trinh Jquery
Giao Trinh JqueryHải Finiks Huỳnh
2K views115 slides
J query by
J queryJ query
J queryPhuong Dinh
1.3K views115 slides
Sử dụng dịch vụ điện toán đám mây by
Sử dụng dịch vụ điện toán đám mâySử dụng dịch vụ điện toán đám mây
Sử dụng dịch vụ điện toán đám mâyPhamTuanKhiem
118 views76 slides
jquery.pdf by
jquery.pdfjquery.pdf
jquery.pdfBuiNguyenNhiUyenB200
41 views115 slides

Similar to Giới thiệu Overview về AngularJS, Yeoman(20)

ITLC - Hanoi - NodeJS - ArrowJS - 27-11 - 2015 by IT Expert Club
ITLC - Hanoi - NodeJS - ArrowJS - 27-11 - 2015ITLC - Hanoi - NodeJS - ArrowJS - 27-11 - 2015
ITLC - Hanoi - NodeJS - ArrowJS - 27-11 - 2015
IT Expert Club2K views
Sử dụng dịch vụ điện toán đám mây by PhamTuanKhiem
Sử dụng dịch vụ điện toán đám mâySử dụng dịch vụ điện toán đám mây
Sử dụng dịch vụ điện toán đám mây
PhamTuanKhiem118 views
Lập trình web asp.net MVC by MasterCode.vn
Lập trình web asp.net MVCLập trình web asp.net MVC
Lập trình web asp.net MVC
MasterCode.vn 30.1K views
01 chuong01tongquanveasp netmvc5 by Thanh Nguyen
01 chuong01tongquanveasp netmvc501 chuong01tongquanveasp netmvc5
01 chuong01tongquanveasp netmvc5
Thanh Nguyen80 views
Tổng quan về struts framework, mvc by truong nguyen
Tổng quan về struts framework, mvc  Tổng quan về struts framework, mvc
Tổng quan về struts framework, mvc
truong nguyen499 views
Asp.net mvc framework qua cac vi du by Kim Hyun Hai
Asp.net mvc framework  qua cac vi duAsp.net mvc framework  qua cac vi du
Asp.net mvc framework qua cac vi du
Kim Hyun Hai2.2K views
Tìm hiểu về cloud computing by lanhuonga3
Tìm hiểu về cloud computingTìm hiểu về cloud computing
Tìm hiểu về cloud computing
lanhuonga34.6K views
Tech insider by Long Ta
Tech insiderTech insider
Tech insider
Long Ta566 views
Inventor 2020 Brochure (Vietnamese) by Châu Hải
Inventor 2020 Brochure (Vietnamese)Inventor 2020 Brochure (Vietnamese)
Inventor 2020 Brochure (Vietnamese)
Châu Hải569 views
giới thiệu về Asp.net core 2.0 by VanSy9x
giới thiệu về Asp.net core  2.0giới thiệu về Asp.net core  2.0
giới thiệu về Asp.net core 2.0
VanSy9x203 views
ScrumDay Vietnam 2013: Phương pháp luận phần mềm - Truyền thống và Agile - Ng... by Vu Hung Nguyen
ScrumDay Vietnam 2013: Phương pháp luận phần mềm - Truyền thống và Agile - Ng...ScrumDay Vietnam 2013: Phương pháp luận phần mềm - Truyền thống và Agile - Ng...
ScrumDay Vietnam 2013: Phương pháp luận phần mềm - Truyền thống và Agile - Ng...
Vu Hung Nguyen2.8K views
Giới thiệu Nuxt.js by Robin Huy
Giới thiệu Nuxt.jsGiới thiệu Nuxt.js
Giới thiệu Nuxt.js
Robin Huy331 views

Giới thiệu Overview về AngularJS, Yeoman

  • 1. Giới thiệu về AngularJS & Yeoman TỔNG QUAN & CÁCH SỬ DỤNG ANGULARJS + YEOMAN ĐỂ XÂY DỰNG SPA Người trình bày: Đỗ Nam Khánh Technical Lead @ QSoft Vietnam Corporation khanhdn@qsoftvietnam.com Saturday, 09 November 2013 www.qsoftvietnam.com 1
  • 2. NỘI DUNG • GIỚI THIỆU VỀ ANGULARJS • • ANGULARJS LÀ GÌ? CÁC ĐẶC TRƯNG CỦA ANGULARJS • GIỚI THIỆU VỀ YEOMAN • • • YO GRUNT BOWER • CASE STUDY: XÂY DỰNG ỨNG DỤNG QUẢN LÝ NGƯỜI DÙNG • DEMO • • • GENERATE SKELETON APP PREVIEW APPLICATION WITH BUILT-IN SERVER BUILD & DEPLOY APPLICATION Saturday, 09 November 2013 www.qsoftvietnam.com 2
  • 3. Client Technology Stack Saturday, 09 November 2013 www.qsoftvietnam.com 3
  • 4. SPA??? Saturday, 09 November 2013 www.qsoftvietnam.com 4
  • 5. SPA = Single Page Application • MỘT SING-PAGE APP, HAY CÒN ĐƯỢC GỌI LÀ SINGLE-PAGE INTERFACE, LÀ MỘT WEB APP HAY WEBSITE HIỂN THỊ VỪA VẶN TRÊN MỘT MẶT TRANG WEB, VỚI MỤC ĐÍCH LÀ GIÚP USER CÓ TRẢI NGHIỆM GIỐNG NHƯ ĐANG DÙNG ỨNG DỤNG TRÊN DESKTOP. • LÀ ỨNG DỤNG CHẠY BÊN TRONG TRÌNH DUYỆT, KHÔNG YÊU CẦU PHẢI RELOAD LẠI TOÀN BỘ TRANG WEB MỖI LẦN SỬ DỤNG Saturday, 09 November 2013 www.qsoftvietnam.com 5
  • 6. AngularJS là gì? • Là một MVC framework dành cho các ứng dụng chạy trên nền browser • Được phát triển từ năm 2009 bởi Miško Hevery và Adam Abrons • Sau khi Abrons rời khỏi dự án, Hevery cùng Igor Minár and Vojta Jína đã tiếp tục phát triển & trở thành dự án chính thức được Google hỗ trợ • Phiên bản 1.0 được đưa ra vào tháng 6 năm 2012 • Mục tiêu: để xây dựng các ứng dụng nghiệp vụ theo style CRUD • Được xây dựng với tư tưởng hướng đến việc testing. • Sử dụng một phần của jQuery để thao tác với DOM - jqLite Saturday, 09 November 2013 www.qsoftvietnam.com 6
  • 7. Mục đích thiết kế • Tách các thao tác với DOM ra khỏi application logic. Cải thiện khả năng test của mã nguồn. • Coi việc kiểm thử quan trọng như việc viết mã nguồn. Khó khăn trong việc kiểm thử bị ảnh hưởng đáng kể bởi việc tổ chức code. • Tách riêng phần xử lý ở client của ứng dụng ra khỏi phần xử lý phía server. Điều này cho phép việc phát triển diễn ra song song và cho phép tái sử dụng ở cả hai phía. • Hướng dẫn các developer từ A-Z trong toàn bộ quá trình xây dựng ứng dụng: từ thiết kế UI, viết business logic, cho đến testing. Saturday, 09 November 2013 www.qsoftvietnam.com 7
  • 8. Tại sao nên sử dụng AngularJS? • Các thẻ HTML có sẵn vẫn chưa đáp ứng đủ • • • • Rich text Date picker Cấu trúc lặp cho các nội dung động ... • HTML được xây dựng cho mục đích hiển thị các dữ liệu tĩnh • AngularJS làm cho HTML trở nên"động" • Giúp các team khác nhau có thể cùng làm việc song song • Front-end team: HTML, CSS, Javascript, AngularJS... • Back-end team: PHP API... Saturday, 09 November 2013 www.qsoftvietnam.com 8
  • 9. Các đặc trưng của AngularJS • • • • • • Kiến trúc MVC Two-way binding Dynamic templates Expressions Modules Scopes Saturday, 09 November 2013 • • • • • • • Dependency injection Directives Routing Services Filters Form validation Testing in mind www.qsoftvietnam.com 9
  • 10. Kiến trúc MVC • Phân tách ứng dụng ra các thành phần presentation, data, & logic • Khuyến khích loose coupling giữa các thành phần này • Cùng với services và “dependency injection”, MVC giúp các app Angular có tính cấu trúc tốt hơn, dễ bảo trì và dễ test hơn. Saturday, 09 November 2013 www.qsoftvietnam.com 10
  • 11. MVVM & MVW • Sau nhiều lần refactorings và cải tiến API thì kiến trúc của AngularJS đã trở nên gần hơn với MVVM • $scope object được xem như là một ViewModel, có thể được decorate bởi một function, gọi là Controller • Sau khi chứng kiến nhiều tranh luận vô nghĩa về MV*, một trong các tác giả framework là Igor Minar đã tuyên bố AngularJS là một… MVW framework – Model-View-Whatever. • Whatever = whatever works for you Saturday, 09 November 2013 www.qsoftvietnam.com 11
  • 12. Saturday, 09 November 2013 www.qsoftvietnam.com 12
  • 13. Two-way binding • Data-binding trong Angular web apps là việc tự động đồng bộ hoá dữ liệu giữa model & view components. • Khi thực hiện data-binding, Angular luôn coi Model là “Single-Source of Truth” trong app. • View luôn luôn là thành phần hiển thị ra ngoài của Model. Khi Model thay đổi, View cũng thay đổi theo, và ngược lại. Saturday, 09 November 2013 www.qsoftvietnam.com 13
  • 14. Two-way binding Saturday, 09 November 2013 www.qsoftvietnam.com 14
  • 15. jQuery way: Saturday, 09 November 2013 www.qsoftvietnam.com 15
  • 16. AngularJS way: Saturday, 09 November 2013 www.qsoftvietnam.com 16
  • 17. Dynamic templates • Angular template là 1 đặc tả dạng declarative (khai báo), cùng với thông tin từ model & controller, trở thành rendered view mà user thấy trên mặt browser. Nó là static DOM, chứa HTML, CSS, và các thành phần, thuộc tính của riêng Angular. Các thành phần Angular và các thuộc tính giúp angular thêm các hành vi và biến đổi template DOM thành dynamic view DOM • Nói 1 cách đơn giản nhất thì Template trong AngularJS là “HTML với additional markup” Saturday, 09 November 2013 www.qsoftvietnam.com 17
  • 18. Dynamic templates Output: • web • element • #14 Saturday, 09 November 2013 www.qsoftvietnam.com 18
  • 19. Expressions • Là các snippets giống JS được đặt trong bindings, kiểu như {{expression}}. • Được xử lý bởi $parse service • Ex: <body> 1 + 2 = {{1+2}} </body> Saturday, 09 November 2013 www.qsoftvietnam.com 19
  • 20. Scopes • Là object trong application model • Là phần gắn kết giữa View và Controller • Scope cung cấp các APIs để theo dõi các thay đổi của Model: $watch • Scope cung cấp các APIs để truyền bất kỳ thay đổi nào của Model tới View: $apply • Tự động đồng bộ dữ liệu giữa Model và View Saturday, 09 November 2013 www.qsoftvietnam.com 20
  • 21. Scopes Saturday, 09 November 2013 www.qsoftvietnam.com 21
  • 22. Scopes Saturday, 09 November 2013 www.qsoftvietnam.com 22
  • 23. Scopes Saturday, 09 November 2013 www.qsoftvietnam.com 23
  • 24. Dependence Injection • AngularJS sử dụng DI để tách biệt các modules • Các dependency được đưa vào tự động bởi framework Saturday, 09 November 2013 www.qsoftvietnam.com 24
  • 25. Dependency Annotation • Inferring Dependencies • $inject Annotation • Inline Annotation Saturday, 09 November 2013 www.qsoftvietnam.com 25
  • 26. Inferring Dependencies Saturday, 09 November 2013 www.qsoftvietnam.com 26
  • 27. $inject Annotation Saturday, 09 November 2013 www.qsoftvietnam.com 27
  • 28. $inject API • $injector.get(name): Return an instance of the service. • $injector.has(Name):Allows the user to query if the particular service exist. • $injector.instantiate(Type, locals): Create a new instance of JS type. • $injector.invoke(fn, self, locals): Invoke the method and supply the method arguments from the $injector. Saturday, 09 November 2013 www.qsoftvietnam.com 28
  • 29. Inline Annotation Saturday, 09 November 2013 www.qsoftvietnam.com 29
  • 30. Dependence Injection • Bất cứ function nào được gọi với $injector.invoke đều có thể được inject • Mặc định bao gồm: • • • • • • • controller directive factory filter provider $get (khi định nghĩa provider như là một object) provider function (khi định nghĩa provider như làm một hàm khởi tạo) service Saturday, 09 November 2013 www.qsoftvietnam.com 30
  • 31. Directives • Là các tuỳ biến gắn vào các DOM (attribute, element name, CSS class…) để HTML compiler của AngularJS có thể thêm vào hoặc biến đổi DOM element. • Các loại directive • • • • E - Element: <my-directive></my-directive> A - Attribute: <div my-directive="exp"></div> C - Class: <div class="my-directive: exp;"></div> M - Comment: <!-- directive: my-directive exp --> Saturday, 09 November 2013 www.qsoftvietnam.com 31
  • 32. Built-in Directives • • • • • • • • • • • • • ngApp ngBind ngBindHtml ngBindTemplate ngBlur ngChange ngChecked ngClass ngClassEven ngClassOdd ngClick ngCloak ngController Saturday, 09 November 2013 • • • • • • • • • • • • • ngCopy ngCsp ngCut ngDblclick ngDisabled ngFocus ngForm nghide ngHref ngIf ngInclude ngInit ngKeydown www.qsoftvietnam.com • • • • • • • • • • • • • ngKeypress ngKeyup ngList ngModel ngMousedown ngMouseenter ngMouseleave ngMousemove ngMouseover ngMouseup ngNonBindable ngOpen ngPaste • • • • • • • • • • • • ngPluralize ngReadonly ngRepeat ngSelected ngShow ngSrc ngSrcset ngStyle ngSubmit ngSwitch ngTransclude ngValue 32
  • 33. Ví dụ về directive • http://jsfiddle.net/abhiroop/G3UCK/1/light/ • http://jsfiddle.net/donamkhanh/4YEG6/ Saturday, 09 November 2013 www.qsoftvietnam.com 33
  • 34. Routing • • • • • Dùng để tạo các app theo kiểu SPA (Single Page Application) ngView thường được dùng để render template $routeProvider service được dùng để cấu hình route $location service dùng cho navigate $routeParams service dùng để nhận các param Saturday, 09 November 2013 www.qsoftvietnam.com 34
  • 36. $location service configuration Để cấu hình $location service, cần sử dụng $locationProvider thiết lập các tham số như sau: • html5Mode(mode): {boolean} • true - see HTML5 mode • false - see Hashbang mode • default: false • hashPrefix(prefix): {string} • prefix used for Hashbang URLs (used in Hashbang mode or in legacy browser in Html5 mode) • default: "" Saturday, 09 November 2013 www.qsoftvietnam.com 36
  • 39. $location events • $locationChangeStart • $locationChangeSuccess Saturday, 09 November 2013 www.qsoftvietnam.com 39
  • 40. Services • • • • Services là các phần dùng lại được của business logic Được tạo dưới dạng các singleton object Services là một phần của module Modules là nhóm các chức năng Saturday, 09 November 2013 www.qsoftvietnam.com 40
  • 42. Constant service • Là một service hữu dụng thường được dùng để cung cấp các cấu hình mặc định trong directive • Sử dụng như hằng số, các giá trị trong constant service sẽ không thể thay đổi được Saturday, 09 November 2013 www.qsoftvietnam.com 42
  • 43. Value service • Tương tự như consant service, chỉ khác ở chỗ là ta có thể thay đổi được giá trị Saturday, 09 November 2013 www.qsoftvietnam.com 43
  • 44. Service Factory • Là một service được sử dụng nhiều nhất & cũng là khái niệm dễ hiểu nhất. • Là một service mà có thể trả về bất cứ kiểu dữ liệu nào. Không cần biết làm thế nào để tạo ra đối tượng, bạn chỉ cần quan tâm đến việc trả về cái gì. Saturday, 09 November 2013 www.qsoftvietnam.com 44
  • 45. Service • Hoạt động gần giống như Factory • Service nhận về một constructor, do đó khi sử dụng lần đầu tiên nó sẽ thực hiên new Foo() để khởi tạo đối tượng Saturday, 09 November 2013 www.qsoftvietnam.com 45
  • 46. Service Provider • Service provider names bắt đầu bằng tên của service + hậu tố Provider. • app.provider('foo', function() {…}) • app.config(function(fooProvider) {…}) • Một service provider phải có $get function để có thể inject vào các thành phần khác trong ứng dụng Saturday, 09 November 2013 www.qsoftvietnam.com 46
  • 47. Service Provider Saturday, 09 November 2013 www.qsoftvietnam.com 47
  • 48. Filters • Định dạng dữ liệu để hiển thị cho user. • Theo tinh thần của UNIX filters và sử dụng các cú pháp tương tự | (pipe) • Built-in filters • • • • • • • • currency date json limitTo lowercase uppercase orderBy number Saturday, 09 November 2013 www.qsoftvietnam.com 48
  • 49. Form validation • Controls (input, select, textarea) là các cách users nhập data • Form là 1 tập các controls với mục đích nhóm các controls liên quan đến nhau • Form và controls cung cấp các validation services, để users được báo các lỗi liên quan đến nhập dữ liệu • Server-side validation cũng cần thiết để đảm bảo độ an toàn của app. • Sử dụng thuộc tính “novalidate” để tắt chức năng validation mặc định của trình duyệt Saturday, 09 November 2013 www.qsoftvietnam.com 49
  • 50. Form validation • CSS Classes: • ng-valid: class được add vào element nếu valid • ng-invalid: class được add vào element nếu invalid • ng-pristine: class được add vào element lúc ban đầu, trước khi AngularJS xử lý validation • ng-dirty: class được add vào element khi AngularJS xử lý validation Saturday, 09 November 2013 www.qsoftvietnam.com 50
  • 51. Form validation • Custom Validation: • Angular cung cấp các xử lý cơ bản cho hầu hết các kiểu input html5: (text, number, url, email, radio, checkbox) kèm directives để validate (required, pattern, minlength, maxlength, min, max) • Có thể tự đưa ra validate riêng bằng cách tự tạo directive để đưa hàm validate của mình vào ngModel controller Saturday, 09 November 2013 www.qsoftvietnam.com 51
  • 52. Form validation • Validation có thể xuất hiện ở 2 chỗ: • Model to View update: khi model thay đổi, tất cả các hàm trong NgModelController#$formatters array được pipe-lined, để mỗi hàm này có thể format được value và thay đổi trạng thái valid của form control thông qua NgModelController#$setValidity. • View to Model update: tương tự như vậy, khi user tương tác với 1 control, nó gọi NgModelController#$setViewValue. Nó sẽ pipeline tất cả các hàm trong NgModelController#$parsers array, để mỗi hàm này lần lượt convert value và trạng thái thay đổi của form control thông qua NgModelController#$setValidity. Saturday, 09 November 2013 www.qsoftvietnam.com 52
  • 53. Giới thiệu về Yeoman • Gồm 3 ứng dụng: • Yo • Grunt • Bower • Yeoman không chỉ là tool mà còn được sử dụng như là 1 workflow, tập hợp các "best practices" để giúp cho việc phát triển web dễ dàng hơn Saturday, 09 November 2013 www.qsoftvietnam.com 53
  • 54. Yeoman features • Lightning-fast scaffolding • Dễ dàng tạo khung cho những dự án mới với các template tuỳ biến được (vd: HTML5 Boilerplate, Bootstrap), AngularJS v.v… • Great build process • Minification and concatenation (thu nhỏ và cố kết ?) • Tối ưu tất cả image files, HTML • Compile CoffeeScript and Compass files • Automatically lint your scripts • Tất cả scripts đều được tự động chạy qua JSHint để đảm bảo nó tuân theo những best-practices. Saturday, 09 November 2013 www.qsoftvietnam.com 54
  • 55. Yeoman features • Built-in preview server • Tối ưu ảnh cực tốt • Dùng OptiPNG và JPEGTran • Package management cực ngon • Dễ dàng search được packages mới thông qua command-line, cài đặt và update chúng mà không cần mở browser. • PhantomJS Unit Testing • Dễ dàng chạy unit tests trong WebKit thông qua PhantomJS. Saturday, 09 November 2013 www.qsoftvietnam.com 55
  • 56. Workflow without Yeoman 1. 2. 3. 4. 5. 6. 7. 8. 9. Tìm HTML Boilerplate Download & add vào project Tìm UI Boilerplate Download & add vào project Download project libs, add Copy boilerplate cho models, views, setup Setup test runner Setup build process Viết code! Saturday, 09 November 2013 www.qsoftvietnam.com 56
  • 57. Yeoman workflow Saturday, 09 November 2013 www.qsoftvietnam.com 57
  • 58. Yeoman workflow Includes: • HTML5 Boilerplate • Twitter Bootstrap • AngularJS • Karma Testrunner • Scaffolding for Models, Directives, Routes, Views, Values, Constants, Service s, Factories, ... • DI-aware JavaScript minification • CoffeeScript support Saturday, 09 November 2013 www.qsoftvietnam.com 58
  • 59. Tool để tạo khung, lên khung các app mới, tạo config cho Grunt và đưa vào các task Grunt cần cho build Saturday, 09 November 2013 www.qsoftvietnam.com 59
  • 60. AngularJS generator Saturday, 09 November 2013 www.qsoftvietnam.com 60
  • 61. AngularJS generator Available generators: 1. angular (aka angular:app) 2. angular:controller 3. angular:directive 4. angular:filter 5. angular:route 6. angular:service Saturday, 09 November 2013 7. angular:provider 8. angular:factory 9. angular:value 10. angular:constant 11. angular:decorator 12. angular:view www.qsoftvietnam.com 61
  • 62. • Bower là một công cụ quản lý package và các thành phần phụ thuộc dành cho web. • Được viết bởi Twitter Inc Saturday, 09 November 2013 www.qsoftvietnam.com 62
  • 63. Bower commands Việc sử dụng Bower chủ yếu thông qua 3 lệnh sau: 1. bower search <package name> 2. bower install <package name> 3. bower uninstall <package name> Saturday, 09 November 2013 www.qsoftvietnam.com 63
  • 64. Bower components • Hiện tại có khoảng 5435 bower components • http://sindresorhus.com/bower-components Saturday, 09 November 2013 www.qsoftvietnam.com 64
  • 65. • • • • Grunt là tool tự động hoá cho các dự án phát triển web. Ta có thể minify code, biên dịch, unit test, validate, etc. Có thể tự động hoá rất nhiều thứ để giảm effort của bạn. Mở rộng được. Saturday, 09 November 2013 www.qsoftvietnam.com 65
  • 66. Grunt tasks (in Yeoman) • clean: xoá build trước đó • copy: copy toàn bộ folder staging (intermediate/) sang (publish/) • css: gộp các file CSS thành 1 file, thay thế @imports và “nén” CSS files • html: tối giản HTML (từ mức đơn giản đến mức tối đa) • img: tối ưu file .png/.jpg qua OptiPNG/JPEGtran • mkdirs: chuẩn bị các thư mục build • rev: tự động rename các file build theo revision • usemin: thay thế các tham chiếu thành scripts / stylesheets chưa giản lược Saturday, 09 November 2013 www.qsoftvietnam.com 66
  • 67. Case study: User management https://github.com/donamkhanh/sample-user-management Saturday, 09 November 2013 www.qsoftvietnam.com 67
  • 68. Case study: User management Flow thực hiện bằng jQuery: • Tạo mockup layout • Xây dựng server API • Thao tác với server API • Phải viết khá nhiều code Saturday, 09 November 2013 www.qsoftvietnam.com 68
  • 69. Case study: User management Flow thực hiện bằng AngularJS: • Static template • Angular templates • XHRs & Dependency injection • Routing & multiple views • REST and custom services Saturday, 09 November 2013 www.qsoftvietnam.com 69
  • 70. Case study: User management Generate data: www.generatedata.com Saturday, 09 November 2013 www.qsoftvietnam.com 70
  • 71. Demo • Generate skeleton app • • • • yo angular:route hello yo angular:directive hello yo angular:controller hello yo angular:view hello • Preview application with built-in server • grunt server • Build application • grunt build Saturday, 09 November 2013 www.qsoftvietnam.com 71
  • 72. Tài liệu tham khảo • • • • • http://angularjs.org http://yeoman.io http://bower.io http://gruntjs.com http://angular-tips.com/blog/2013/08/understanding-servicetypes • http://pivotal.github.io/jasmine • http://karma-runner.github.io/0.10/index.html Saturday, 09 November 2013 www.qsoftvietnam.com 72
  • 73. THANK YOU FOR YOUR ATTENTION! Saturday, 09 November 2013 www.qsoftvietnam.com 73

Editor's Notes

  1. SPA làgì?Xuhướngtừnăm 2006-2007?