MỤC LỤC
CHƯƠNG I: TỔNG QUAN VỀ ANGULAR JS FRAMEWORK 1
1.1. Ngôn ngữ lập trình web JavaScript 1
1.1.1. Lịch sử phát triển 1
1.1.2. Javascript là gì? 1
1.1.3. Javascript có thể làm được những gì? 1
1.2. Tng quan v AngularJs framework 1
1.2.1 Lịch sử phát triển 1
1.2.2. Angular JS là gì? 3
1.2.3. Các tính năng chính 3
1.2.4. Đặc trưng 4
1.2.5. Mô hình MVC 4
1.2.6. SPA – Single Page Application 5
CHƯƠNG II: ANGULAR JS FRAMEWORK 6
2.1. Tại sao phải sử dụng AngularJs? 6
2.2. AngularJs được lập trình như thế nào? 6
2.2.1. Ci đặt AngularJs 6
2.2.2. Ví d đơn gin 7
2.2. Cc thnh phn ca AngularJs 8
2.2.1 Angular Template 8
2.2.2. Modules 9
2.2.3. Scope 13
2.2.4. Model 13
2.2.5. Controller 13
2.2.6.Expression (Biểu thc) 14
2.2.7. Filters (B lc) 15
2.2.8. Directives 16
2.2.9. Services 18
2.2.10. Multiple Views and Routing 19
2.2.11. Form validation 22
2.3. Lập trình AngularJS pha server với Node.js 23
2.3.1.Node.js là gì? 23
2.3.2.Node.js có thể lm được những gì? 23
2.3.3. Block code và Non-block code 23
2.3.4.Ứng dng đầu tiên 24
2.4. Công cụ lập trình với AngularJS 25
2.4.1 Yeoman 25
2.4.2. WebStorm 26
2.5. Khởi chạy ứng dụng 27
2.6. Testing and Debug 27
2.6.1. Karma 27
2.6.2. Ci đặt Karma 27
2.6.3. Test với Karma 27
TÀI LIỆU THAM KHẢO 29
Tm hiểu v AngularJS
Nguyễn Minh Sang 1
CHƯƠNG I: TỔNG QUAN VỀ ANGULAR JS FRAMEWORK
1.1. Ngôn ngữ lập trình web JavaScript
1.1.1. Lịch sử phát triển
- Được phát triển bởi Brendan Eich tại Hãng truyn thông Netscape với cái tên đầu tiên
Mocha, rồi sau đó đổi tên thành LiveScript, và cuối cùng thành JavaScript.
- JavaScript được bổ sung vào trình duyệt Netscape bắt đầu từ phiên bn 2.0b3 của trình
duyệt ny vo tháng 12 năm 1995. JavaScript được bổ sung vào trình duyệt Internet
Explorer bắt đầu từ Internet Explorer phiên bn 3.0 được phát hnh tháng 8 năm 1996.
1.1.2. Javascript là gì?
- JavaScript là mt ngôn ngữ lập trình kịch bn dựa trên đối tượng được phát triển từ các ý
niệm nguyên mẫu. Ngôn ngữ ny được dùng rng rãi cho các trang web, nhưng cũng được
dùng để tạo kh năng viết script sử dng các đối tượng nằm sẵn trong các ng dng.
1.1.3. Javascript có thể lm được những gì?
- Trên trình duyệt, rất nhiu trang web sử dng JavaScript để thiết kế trang web đng và
mt số hiệu ng hình nh thông qua DOM. JavaScript được dùng để thực hiện mt số tác
v không thể thực hiện được với chỉ HTML như kiểm tra thông tin nhập vào, tự đng thay
đổi hình nh
- Bên ngoài trình duyệt, JavaScript có thể được sử dng trong tập tin PDF của Adobe
Acrobat v Adobe Reader. Điu khiển Dashboard trên hệ điu hành Mac OS X phiên bn
10.4 cũng có sử dng JavaScript.
1.2. Tng quan v AngularJs framework
1.2.1 Lịch sử phát triển
- Dự án AngularJS được bắt đầu từ năm 2009, do lập trình viên Misko Hevery tại Google
viết ra. Misko v nhóm lúc ny đang tham gia vo 1 dự án của Google tên là Google
Feedback. Với AngularJS, Misko đã rút ngắn số dòng code front-end từ 17000 dòng còn
chỉ khong 1500. Với sự thành công đó, đi ngũ của dự án Google Feedback quyết định
Tm hiểu v AngularJS
Nguyễn Minh Sang 2
phát triển AngularJS theo hướng mã nguồn mở. Theo thông số từ Github mà mình thấy,
hiện tại dự án AngularJS đang có gần 11000 người theo dõi v hơn 2000 lượt fork.
- Công nghệ HTML hỗ trợ tốt cho các trang web tĩnh, kiểu như trước năm 2000 vậy. Khi
bạn xây dựng 1 trang web với PHP, Node/Express, hay Ruby th nó cũng chỉ là mt trang
web tĩnh với ni dung được thay đổi khi bạn gửi request v máy chủ, máy chủ sẽ render 1
trang với ni dung tương ng. Tuy nhiên mi th đã thay đổi nhiu từ sự phát triển của
HTML5, nhất là khi có sự chống lưng từ những ông lớn như Google, Yahoo, Facebook, v
sự tập hợp đông đo của cng đồng mã nguồn mở.
- Douglas Crockford, người được biết đến nhiu qua JSON v JSLint đã dùng sự chênh
lệch v đ dày giữa 2 cuốn sách "Javascript: The definitive guide" và "Javascript: The good
parts" để châm biếm 1 cách hi hước v JavaScript.
- Tuy nhiên, sự thành công của jQuery đã khiến JavaScript được nhiu người yêu thích vì
tính đơn gin và dễ sử dng. Việc phát triển 1 website sử dng AJAX thì không khó, bạn
có thể dùng jQuery để làm việc này với $.ajax tuy nhiên làm thế no để xây dựng mt phần
mm có thể mở rng, dễ test, nâng cấp và bo trì thì không h đơn gin vì bn thân
JavaScript không được thiết kế ngay từ đầu để làm những việc ny. Do đó sự ra đời của
những framework hỗ trợ lập trình viên xây dựng ng dng web 1 cách có hệ thống đã ra
đời như Sencha, Ember, Knockout, Backbone, v AngularJS.
Tm hiểu v AngularJS
Nguyễn Minh Sang 3
1.2.2. Angular JS là gì?
- Angular là framework javascript mạnh mẽ. Angular tăng cường HTML cho các ng dng
web. Nó có chc năng để gim bớt quá trình phát triển ng dng web. Từ nhiu năm trước,
khi HTML mới bắt đầu, nó được dự định để xây dựng trang web hoặc có thể nói đó l mt
cách để hiển thị tài liệu tĩnh, không để xây dựng mt ng dng web đng. Bây giờ, hãy
tưởng tượng nếu HTML lần đầu tiên được dùng để xây dựng các ng dng web đng, đó
là Angular. Angular là những gì HTML sẽ có được nếu nó được thiết kế để xây dựng các
ng dng web . Lời gii thích này có thể khó hiểu nhưng khi đc tiếp v sau bạn sẽ ngạc
nhiên với những gì Angular có thể làm và sẽ hiểu ý nghĩa ny.
1.2.3. Cc tnh năng chnh
- Hai cách liên kết dữ liệu trong Angular là kh năng thay đổi giá trị thuc tính của đối
tượng, đồng thời giao diện người dùng đưa ra sự thay đổi đó ngay tại thời điểm đó, v
ngược lại. Ví d, nếu bạn có thuc tính của mt đối tượng gi là "Page.Title ', mỗi lần thay
đổi giá trị' Page.Title, giao diện người dùng tự đng cập nhật và hiển thị giá trị mới của
'Page.Title. Và nếu bạn nhập vào trong giao diện ng dng người dùng của bạn, nó có thể
cập nhật giao diện người dùng v cũng cập nhật thuc tính của đối tượng. Tất c đu được
xử lý bởi Angular do đó không cần phi viết giống như trong mt số framework javascript
khác. Những gì cần làm chỉ đơn gin l xác định model của chúng ta, và bây giờ bất c khi
nào mt model được thay đổi, nó sẽ thay đổi bất c nơi no nó được đặt, có thể là trong
đối tượng c thể hoặc trong các lớp đại diện. Model trong Angular chỉ là cấu trúc javascript
cũ rõ rng, không có g lạ mắt nhưng nó lại rất hữu ích.
- Tính năng mới thực sự l đặc điểm tạo nên mt khong cách khác nhau lớn giữa Angular
và bất kỳ framework javascript khác. Directives l đ cập đến mt tính năng để mở rng
nghĩa của từ HTML, đồng thời cũng có thể được xem như l mt cách để chỉ cho trình
duyệt mẹo mới của bạn. Chúng ta biết v header trong HTML5, đó l đại diện cho mt tiêu
đ nhưng nó chỉ là phần tử tĩnh. Mặc dù HTML có thể có nhiu thẻ , nhưng nó không đủ
mạnh để tạo ra mt ng dng web đẹp. Với đặc điểm chỉ dẫn , chúng ta có thể tạo ra từ
vựng HTML mới để trình duyệt hiểu nó có nghĩa l g v nó nên lm g. Ví d với Angular
chúng ta có thể tạo ra thẻ như sau <draggable> drag me </ draggable > . Các văn bn bên
Tm hiểu v AngularJS
Nguyễn Minh Sang 4
trong tag draggable bây giờ sẽ trở thành draggable trong trình duyệt, sau đó chỉ cần viết
mt định nghĩa chỉ dẫn draggable trong ng dng Angular của chúng ta l xong.Đây l mt
ví d đơn gin của Angular, nó có thể làm rất nhiu th hữu ích hơn. V nó không chỉ giới
hạn mt phần tử html mà có sẵn để thực thi các thuc tính, các lớp hoặc các chú thích html.
Directives trong Angular khác với directtives tạo bởi html ở chỗ chúng có thể thực hiện
nhiu hnh vi đng hơn.
- Nhiu framework cần có template nhưng Angular template lại chỉ là html.
- Dependency injection làm cho ng dng Angular dễ dng hơn để phát triển, chúng ta có
thể sắp xếp mã (code) thành các module. Bằng cách này, chúng ta có thể tạo ra các thành
phần tái sử dng mà có thể được gi v sau, bất c khi nào cần thiết. Ý tưởng ny l đặc
biệt tốt là khi ng dng mở rng lớn hơn v cần phi được mở rng, dễ dàng bo trì và
kiểm chng. Dependency injection là mt cách để ghép các đoạn mã code với nhau, điu
ny đòi hỏi phi phân chia mã code theo các chc năng riêng biệt như service, controller,
hoặc provider nhưng không giới hạn chúng.
1.2.4. Đặc trưng
- Kiến trúc MVC, Two-way binding, Dynamic templates, Expressions, Modules, Scopes,
Dependency injection, Directives, Routing, Services, Filters, Form validation, Testing in
mind.
1.2.5. Mô hình MVC
Tm hiểu v AngularJS
Nguyễn Minh Sang 5
- Mô hình MVC (Model - View - Controller) là mt kiến trúc phần mm hay mô hình
thiết kế được sử dng trong kỹ thuật phần mm. Nó giúp cho các developer tách ng dng
của h ra 3 thành phần khác nhau Model, View và Controller. Mỗi thành phần có mt
nhiệm v riêng biệt v đc lập với các thành phần khác.
- Mô hnh MVC được giới thiệu từ những năm 70 như mt phần của Smalltalk, nhưng đối
với nn tng web, thì nó mới được thịnh hành gần đây.
- Ý tưởng đằng sau MVC l để chia rõ 3 thành phần chính là model(xử lý, truy xuất
database), view(giao diện), và controller(điu hướng yêu cầu từ người dùng).
- MVC thể hiện tính chuyên nghiệp trong lập trình, phân tích thiết kế. Do được chia thành
các thành phần đc lập nên giúp phát triển ng dng nhanh, đơn gin, dễ nâng cấp, bo trì.
Đối với Angular, View sẽ là DOM, Controller là các lớp JavaScript, còn Model sẽ là dữ
liệu được lưu ở thuc tính của các đối tượng trong JS.
- Sau khi chng kiến nhiu tranh luận v MV*, mt tác gi của Angular đã tuyên bố
AngularJS là mt MVW framework (Model – View – Whatever, trong đó Whatever l viết
tắt của whatever works for you).
1.2.6. SPA – Single Page Application
- Mt single page application hay còn được gi l single page interface, l mt web app
hay website hiển thị vừa vặn trên mt mặt của trang web với mc đích giúp người dùng có
tri nghiệm giống như đang dùng ng dng trên desktop.
- L ng dng chạy bên trong trnh duyệt, không yêu cầu phi ti lại ton b trang web mỗi
lần sử dng.
Tm hiểu v AngularJS
Nguyễn Minh Sang 6
CHƯƠNG II: ANGULAR JS FRAMEWORK
2.1. Tại sao phải sử dụng AngularJs?
- Angular được đưa ra bởi Google. Tại sao điu này quan trng để biết ? Như bạn có thể
đoán, Google đã phát triển các ti năng v thiên ti như đi bóng của h . H thực sự biết
những tinh tế của trang web và những sự phát triển ng dng web . Ít nhất là thực tế này
có thể cung cấp cho người dùng đm bo Angular xuất phát từ người chúng ta có thể tin
tưởng . Ngoài ra, nếu bạn đã từng sử dng sn phẩm của Google như Gmail hay Google
Plus, bạn sẽ không ngạc nhiên với sự tương tác của chúng và c ajax gửi liên tc mi nơi
mà không phi làm mới toàn b trang web v để sử dng Angular kiến thc chủ yếu cần
phi biết trước là Javascript.
2.2. AngularJs được lập trình như thế no?
2.2.1. Ci đặt AngularJs
2.2.1.1. Tải AngularJS
- Truy cập vo trang web hoặc
v ti v bn angularjs mới nhất. Bn hiện mới nhất hiện tại l 1.2.16.
2.2.1.2. Chn Angular vo ứng dụng.
* T host AngularJS
<script src="angular.min.js"></script>
- Theo cách ny th cần phi download angularjs v máy v nhúng trực tiếp vo ng dng.
* Dùng phiên bản có sẵn trên server ca Google
- Ngoài cách trên ra bạn cũng có thể sử dng phiên bn nén của AngularJS có sẵn trên
server của Google. Sử dng cách ny có 2 điu lợi là tiết kiệm băng thông cho trang web
của bạn và AngularJS sẽ được load nhanh hơn nếu máy của người dùng đã cache
AngularJS.
- Nhưng cách ny không hoạt đng nếu không được kết nối mạng.
<script
src=" />.js"></script>
Tm hiểu v AngularJS
Nguyễn Minh Sang 7
2.2.2. V dụ đơn giản
<!doctype html>
<html lang="en" ng-app>
<head>
<meta charset="utf-8">
<title>V d AngularJS </title>
<script src="js/angular.js"></script>
</head>
<body>
<p>Hello {{'World' + '!'}}</p>
</body>
</html>
Phân tch v dụ:
ng-app directive:
Directives l các tùy biến gắn vo các DOM (attribute, element name, CSS class …) để
HTML compiler của AngularJS có thể thêm vo hoặc biến đổi DOM element.
<html ng-app>
Ng-app cho biết phạm vi hoạt đng của AngularJS. Chỉ thị ny cho biết vị trí bắt đầu để
sử dng các phần tử của AngularJS.
<script src="js/angular.js">
- Chn AngularJs vo ng dng.
<p> Hello {{'World' + '!'}} </p>
Mt đặc điểm quan trng của AngularJs l kh năng binding dữ liệu sử dng cặp dấu ngoặc
nhn {{}}. Đoạn mã ny sẽ xuất ra dữ liệu l chuỗi “Hello World !” ra trnh duyệt.
Tm hiểu v AngularJS
Nguyễn Minh Sang 8
Trong dấu ngoặc nhn có thể cha biến v các biểu thc toán hc.
<p>1 + 2 = {{ 1 + 2 }}</p>
Đoạn mã ny sẽ in lên trnh duyệt chuỗi “1 + 2 = 3”
2.2. Cc thnh phn ca AngularJs
2.2.1 Angular Template
Đôi lúc trong quá trnh xây dựng hệ thống, file HTML trở nên phc tạp để gii quyết vấn
đ này ta cần chia thành nhiu phần khác nhau, AngularJS cung cấp cho chúng ta mt gii
pháp hữu ích đó l template.
- 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 trình duyệt. Nó là static DOM, cha
HTML, CSS, và các thành phần, thuc tính riêng của Angular. Các thành phần Angular và
các thuc 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 gin nhất th template trong AngularJS l “HTML voi81 additional
markup”.
Trong Angular, chúng ta có 2 cách để tạo mt template.
Dùng file ngoài:
Chúng ta có thể dùng thêm mt file html bên ngoi để làm template cho file chính, ví d:
message.html
<h3>Hello, {{name}}!</h3>
Dùng script
Chúng ta có thể tích hợp thẳng template vo file hiện hnh thông qua thẻ script với type l
text/ng-template
<script type="text/ng-template" id="message.html">
<h3>Hello, {{name}}!</h3>
</script>
Tm hiểu v AngularJS
Nguyễn Minh Sang 9
Cch sử dụng template
Có nhiu cách để sử dng template, tuy nhiên trong AngularJS có 2 cách thông dng nhất
để dùng template đó l ng-include v ngRoute (sẽ nói ở phần sau), ví d:
index.html
<!doctype html>
<html ng-app="ExampleModule">
<head>
<script
src="
<script src="script.js"></script>
</head>
<body>
<div ng-controller="ExampleCtrl">
<input type="text" ng-model="name">
<div ng-include src="template_name"></div>
</div>
<script type="text/ng-template" id="message.html">
<h3>Hello, {{name}}!</h3>
</script>
</body>
</html>
var app = angular.module('ExampleModule', []);
app.controller('ExampleCtrl', function($scope) { $scope.template_name = 'message.html';
$scope.name = 'World'; });
2.2.2. Modules
Trong các ng dng thực tế, việc phân chia ng dng thành các thành phần khác nhau là
điu cần thiết. Dưới đây l lợi ích của việc chia nhỏ ng dng:
Dễ dng hơn cho việc qun lý và khai báo ng dng cũng như kiểm tra lại sau này
Kh năng tái sử dng cũng như tận dng các 3rd modules
Nạp từng phần ng dng sẽ nhanh hơn l buc phi nạp toàn b ng dng vào rồi
mới chạy.
Tm hiểu v AngularJS
Nguyễn Minh Sang 10
Trong AngularJS, module được hỗ trợ trong khai báo ng-app bên cạnh khai báo nó trong
mã nguồn script, dưới đây l mt template chuẩn của angular sử dng modules:
<!doctype html>
<html ng-app="myModule">
<head>
<title>Module trong AngularJS </title>
<script src="js/angular.js"></script>
<script src="js/app.js"></script>
</head>
<body> <p>V d đơn gin v module p>
</body>
</html>
Trong ví d ny module được khai báo ngay trong thẻ <html> với tên l myModule.
var app = angular.module('myModule',[]);
ng-app="myModule": Khai báo mt angular app là myModule, sử dng myModule
được khai báo trong script.
Trong script, angular.module() là hàm khai báo cho module.
cặp dấu ngoặc [] chính là mng các module sẽ được nạp chung vo để chạy chung với
ng dng (module chính được khai báo trong ng-app).Ví d:
var app = angular.module('myModule', ['ngRoute', 'ngBootstrap']);
Controller trong module.
Tm hiểu v AngularJS
Nguyễn Minh Sang 11
Trong ví d trên chúng ta đã thấy việc khai báo module như thế no, vậy controller khi ng
dng sẽ được khai báo như thế no. Hãy xem ví d duới đây
index.html
<!doctype html>
<html ng-app="ExampleModule">
<head>
<script
src="
<script src="script.js"></script>
</head>
<body>
<div ng-controller="ExampleCtrl">
Hello, {{ name }}!
</div>
</body>
</html>
script.js
var app = angular.module('ExampleModule', []);
app.controller('ExampleController', function($scope) {
$scope.name = 'World';
});
• Method .controller của module sẽ đóng vai trò khai báo thêm mt controller cho module.
• Function đại diện cho controller được khai báo bnh thường giống như controller khai
báo bên ngoài module.
- AngularJS sử dng Dependence Injection để tách biệt giữa các modules.
- Các dependency được đưa vo tự đng bởi framework
Tm hiểu v AngularJS
Nguyễn Minh Sang 12
T chức ca một ứng dụng thc tế
Thông thường th tổ chc mt ng dng thực tế sẽ được khởi tạo như sau
├── index.html
├── css
│ └── style.css
└── scripts
├── module_1.js
├── module_2.js
├── module_3.js
└── main.js
index.html chính là html documents
style.css chính l mã nguồn css cho document
main.js chính l mã nguồn cho module chính
các files js khác l các modules được module chính sử dng, như vậy template của chúng
ta sẽ được khai báo lại như sau
index.html
<!doctype html>
<html ng-app="ExampleModule">
<head>
<link rel="stylesheet" href="css/style.css">
<script
src="
<script src="scripts/module_01.js"></script>
<script src="scripts/module_02.js"></script>
<script src="scripts/module_03.js"></script>
<script src="main.js"></script>
</head>
<body>
<div ng-controller="ExampleCtrl">
Hello, Angular's Module!
</div>
</body>
</html>
Tm hiểu v AngularJS
Nguyễn Minh Sang 13
main.js
var app = angular.module('ExampleModule', ['Module1', 'Module2',
'Module3']);
app.controller('ExampleController', function($scope) {
$scope.name = 'World';
});
2.2.3. Scope
'$scope' l đối tượng tham chiếu tới model được sử dng trong controller. L thnh 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 để truyn bất kỳ thay đổi no của Model tới View : $apply
Tự đng đồng b dữ liệu giữa Model v View
2.2.4. Model
<input type="text" ng-model="greeting">
{{ greeting }}
Ng-model cho biết đối tượng nhận giá trị của input. {{greeting}} sẽ in ra giá trị được nhập
vo input.
2.2.5. Controller
<script>
var demo = angular.module('myApp',[]);
demo.controller('GreetingController', ['$scope', function($scope) {
$scope.greeting = 'Hello World!';
}]);
</script>
Tm hiểu v AngularJS
Nguyễn Minh Sang 14
Tạo mt module cho ng dng:
<html ng-app="myApp">
- Đặt biến “demo” cha module “myApp” của ng dng.
var demo = angular.module('myApp',[]);
- Tạo mt controller mới cho module ny
demo.controller('GreetingController', ['$scope', function($scope) {
$scope.greeting = 'Hello World!';
}]);
'GreetingController' l tên của controller, cách đặt tên nên cha tên v đuôi “Controller”
để dễ nhận biết.
['$scope', function($scope)
Viết hm sử dng với biến $scope.
$scope.greeting = 'Hello World!';
Gán giá trị cho biến greeting. Để in được giá trị của greeting ra trnh duyệt.
<div ng-controller="GreetingController">
{{ greeting}}
</div>
Ng-controller cho biết controller đang hoạt đng. Đoạn mã ny sẽ in ra trnh duyệt chuỗi
“Hello World! ” được khai báo trong “GreetingController”.
2.2.6.Expression (Biểu thức)
Expression được sử dng trong tất c các phần của AngularJs, v vậy cần phi nắm vững
v expression v cách m Angular sử dng, tính toán. Nó được bao bởi kí hiệu {{ }}. Mt
biến được khởi tạo từ controller thông qua $scope cũng được coi l mt expression.
- Expression các snippets giống JS được đặt trong bindings, kiểu như {{expression}}.
- Được xử lý bởi $parse service.
Tm hiểu v AngularJS
Nguyễn Minh Sang 15
Ví d: <body> 2 + 2 = {{2 + 2}} </body>
Angular sẽ tính toán giá trị trong biểu thc v xuất ra mn hnh kết qu “2 + 2 = 4”.
2.2.7. Filters (Bộ lc)
Trong Angular, mt filter cung cấp mt định dạng dữ liệu để hiển thị tới người dùng.
Theo tinh thần của UNIX filters và sử dng các cú pháp tương tự | (pipe).
Angular cung cấp mt số filter được xây dựng sẵn như: lowercase, date, number, currency,
limitTo, orderBy…
Ví d:
<input ng-model="userInput"> Uppercased: {{ userInput | uppercase }}
Khi người dùng nhập dữ liệu vo input th giá trị đó sẽ được chuyển thnh chữ viết thường.
Mt số filter khác:
{{ "chui k t vit thưng" | uppercase }}
{{ {name: "Sang", age: 21} | json }}
{{ 1304375948024 | date }}
{{ 1304375948024 | date:"MM/dd/yyyy @ h:mma" }}
Kết quả:
CHUI K T VIT THƯNG
{ "name": "Sang", "age": 21 }
May 3, 2011
05/03/2011 @ 5:39AM
Tm hiểu v AngularJS
Nguyễn Minh Sang 16
2.2.8. Directives
Những th như thuc tính, class, tên của 1 DOM element gi chung là directive.
AngularJS sẽ dựa vo chúng để attach các chỉ thị hoặc các sự kiện tới DOM element đó.
Bn thân AngularJS đã có rất nhiu các directive : ng-bind, ng-model, ng-click, ng-
controller
Việc dùng directive sẽ gim thiểu được số lượng thẻ HTML , code HTML nhìn sẽ gn
gàng và sáng sủa hơn.
AngularJS cung cấp cho chúng ta 3 loại directive đó l :
- Directive dạng element ( là 1 thẻ HTML ) viết tắt là E.
<my-directive></my-directive>
- Directive dạng attribute ( thuc tính của 1 thẻ HTML ) viết tắt là A, dạng này là mặc định.
<div my-directive></div>
- Directive dạng class( class CSS ) viết tắt là C.
<div class="my-directive"></div>
Ví d:
Chuẩn bị ti liệu HTML với 3 đủ 3 loại directive:
<!doctype html>
<html ng-app>
<head>
<title>V d AngularJS </title>
<script src="js/angular.js"></script>
</head>
<body>
<div ng-controller="myController">
<my-directive></my-directive>
<div my-directive></div>
<div class="my-directive"></div>
Tm hiểu v AngularJS
Nguyễn Minh Sang 17
</div>
</body>
</html>
AngularJS
var app = angular.module('demoApp', []);
app.controller('myController', function($scope) {
$scope.customer = {
name: 'Sang',
address: 'Quang Trung, Go Vap'
};
})
.directive('myDirective', function() {
return {
restrict : 'C',
template: 'Name: {{customer.name}}
Address: {{customer.address}}'
// templateUrl: 'directive_template.html'
};
});
Trong myCtrl khai báo thông tin customer với name v địa chỉ.
Trong myDirective sẽ return ra 1 object còn việc hiển thị hay đổ dữ liệu vo directive như
nào là việc của Angular chúng ta không cần quan tâm.
Lưu ý: Tên directive phi khai báo dạng camelCase còn khi gi thì có thể dùng dấu - để
ngăn cách giữa các từ hoặc để nguyên như khi khai báo cũng được
restrict : loại directive mặc định là E(element), C là class, A là attribute
template: Ni dung của directive
Tm hiểu v AngularJS
Nguyễn Minh Sang 18
templateUrl: Liên kết tới 1 file template bên ngoài. Template này cha ni dung của
directive.
Name: {{customer.name}} Address: {{customer.address}}
Nếu restrict:"A" thì <my-directive></my-directive> sẽ có dữ liệu
Nếu restrict:"C" thì <div class="my-directive"></div> sẽ có dữ liệu
Nếu restrict:"E" thì <div my-directive></div> sẽ có dữ liệu
Khi thay đổi restrict cần lưu ý infect element để xem nó đổ dữ liệu vào thẻ nào.
2.2.9. Services
AngularJS service là mt object hoặc mt function ph trách mt tác v no đó. Việc viết
service chỉ là việc gom các đoạn xử lý logic vào object hoặc function để dễ qun lý hơn.
Cũng giống như mô hnh MVC tách phần xử lý, điu hướng và hiển thị riêng biệt.
Trong AngularJS service sẽ cha tất c các phần xử lý, Controller nhận yêu cầu và gi các
service cần thiết để xử lý, Model handle dữ liệu từ các control, View hiển thị dữ liệu, Route
điu hướng request tới controller.
Bn thân AngularJS cũng cha những service như: $http, $scope, $window,
$RouteProvider
Có 2 cch để tạo service trong Angularjs.
Cách 1:
Cú pháp:
module.service( 'serviceName', function );
Ví d:
var module = angular.module('myapp', []);
module.service('userService', function(){
this.users = ['Sang', 'Nguyen', 'Minh'];
});
Tm hiểu v AngularJS
Nguyễn Minh Sang 19
Cách 2:
Cú pháp:
module.factory('userService', function(){
Ví d:
var fac = {};
fac.users = ['John', 'James', 'Jake'];
return fac;
});
C 2 cách đu tạo ra được service.
Với cách 1 sau khi đăng ký tên service xong bạn sẽ được cung cấp 1 thể hiện của function
mà bạn truyn vào module.service.
Với cách 2 sau khi đăng ký tên factory, trong function truyn vào trong module.factory cần
return thể hiện của đối tượng tạo bên trong nó.
2.2.10. Multiple Views and Routing
Đôi khi trong mt trang, nhiu khi chúng ta chỉ muốn hiển thị mt phần HTML ng với
mỗi chc năng c thể mà ta không cần chuyển đổi trang, Angular là mt full-stack
framework hiệu qu giúp chúng ta có thể lm được việc này nhanh chóng và dễ dàng.
Route là b điu hướng các yêu cầu từ phía người dùng tới các controller tương ng để xử
lý dựa theo các đối số truyn trên thanh url. Route trong AngularJS l thnh phần quan
trng giúp AngularJs tạo được ng dng SPA, chuyển trang m không cần ti lại trnh
duyệt.
Trong AngularJs chúng ta sẽ sử dng $routeProvider để bắt các yêu cầu. Biểu thc route
được tính từ sau dấu #.
Tm hiểu v AngularJS
Nguyễn Minh Sang 20
Xét ví d
<!doctype html>
<html lang="en" ng-app="demoApp" >
<head>
<meta charset="utf-8">
<title>V d AngularJS </title>
<script src="js/angular.min.js"></script>
<script src="js/angular-route.min.js"></script>
</head>
<body>
<div ng-view></div>
</body>
</html>
Từ phiên bn AngularJs 1.0.7 th Route đã được tách thnh mt file js riêng biệt, v để sử
dng được nó ta phi nhúng file angular-route.min.js vo ng dng.
Directive ng-view được sử dng để hiển thị dữ liệu.
<div ng-view></div>
Đăng ký biến app thnh mt module trong AngularJS v thiết lập route cơ bn. Để làm
việc với Route th bạn cần gi và sử dng mt extends module của angular là ngRoute.
var app = angular.module('demoApp', ['ngRoute']);
app.config(['$routeProvider', function($routeProvider){
$routeProvider
.when('/, {
templateUrl : index.html',
controller : 'homeController'
})
.when('/post/:id', {
templateUrl : 'detail.html',
Tm hiểu v AngularJS
Nguyễn Minh Sang 21
controller : 'postController'
})
.otherwise({
redirect: '/'
})
}]);
app.config l method cho phép khai báo các Controller, View tương ng với url
Với route thế ny th khi truy cập vo đường dẫn chính của trang web th trnh duyệt sẽ
load file index.html v bind nó vo <div ng-view></div>.
.when('/post/:id', {
Trong route tới chi tiết bi đăng có sử dng $routeParams service dùng để nhận các đối số
l id của bi viết, giúp xác định được chính xác bi viết cần hiển thị. Đường dẫn truy cập
tới chi tiết bi đăng sẽ có dạng #/post/id. Trong đó id l id của bi đăng. Khi cấu hnh route
không cần phi ghi dấu “#”.
Khi gặp đường dẫn có dạng #/post/id thì route sẽ gi tới controller là postController và sử
dng template từ file detail.html.
.when('/post/:id', {
templateUrl : 'detail.html',
controller : 'postController'
})
$routeProvider.otherwise xử lý cho route mặc định. Khi đường dẫn không khớp với những
route đã được thiết lập th sẽ được tái điu hướng v trang chủ.
.otherwise({
redirect: '/'
});
Tm hiểu v AngularJS
Nguyễn Minh Sang 22
2.2.11. Form validation
- Controls (input, select, textarea) là các cách mà người dùng nhập dữ liệu.
- Form là mt tập các controls với mc đích nhóm các controls liên quan với nhau.
- Form và controls cung cấp các validation services, để người dùng đượ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 bo đ an toàn của ng dng.
- Sử dng thuc tính “novalidate” để tắt chc năng validation mặc định của trình duyệt.
- CSS Classes:
ng-valid: class được thêm vào phần tử nếu kiểm tra.
ng-invalid: class được thêm vào phần tử nếu không kiểm tra.
ng-pristine: class được thêm vào phần tử lúc ban đầu, trước khi AngularJS xử lý
kiểm tra.
ng-dirty: class được thêm vào phần tử khi AngularJS xử lý kiểm tra.
- Custom Validation
Angular cung cấp các xử lý cơ bn cho hầu hết các kiểu input HTML5: (text,
number, url, email, radio, checkbox) km directives để kiểm tra (required, pattern,
minlength, maxlength, min, max).
Có thể tự đưa ra validate riêng bằng cách tự tạo directive để đưa hm validate của
mình vào ngModel controller.
- 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ể định
dạng được giá trị 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 người dùng tương tác với 1 control,
nó gi NgModelController#$setViewValue. Nó sẽ pipe – line tất c các hàm trong
Tm hiểu v AngularJS
Nguyễn Minh Sang 23
NgModelController#$parsers array, để mỗi hàm này lần lượt chuyển đổi giá trị và trạng
thái thay đổi của form control thông qua NGModelController#$setValidity.
2.3. Lập trình AngularJS pha server với Node.js
2.3.1.Node.js là gì?
Node.js là 1 nn tng (platform) chạy trên môi trường V8 Javascript runtime. Node.js
cho phép lập trình viên xây dựng các ng dng có tính mở rng cao sử dng
Javascript trên server. V v được porting từ C nên v mặt tốc đ xử lý thì khá nhanh.
2.3.2.Node.js có thể lm được những gì?
- Xây dựng websocket server (Chat server)
- Ứng dng upload file rất nhanh trên client
- Ad server
- Hoặc bất kỳ ng dng dữ liệu thời gian thực nào.
Nodejs không phi là mt web framework.Nó không dnh cho người mới bắt đầu,
không phi là mt nn tng thực thi các tác v đa luồng.
2.3.3. Block code và Non-block code
Ví d xây dựng chc năng đc file và in ra dữ liệu của file.
Logic
Đc file từ Filesystem, gán dữ liệu tương ng với biến "contents"
In dữ liệu biến "content"
Thực hiện công việc khác tiếp theo.
Non-block code:
Đc file từ Filesystem
Sau khi đc xong thì in dữ liệu (callback)
Thực hiện công việc khác tiếp theo.
Code