AngularJS簡介
目前最新版本1.3.0
放棄了ie8
引入了單向數(shù)據(jù)綁定
刪掉了一些過時(shí)的api (據(jù)說是為了AngularJS2.0做準(zhǔn)備)
AngularJS-實(shí)例演示4大核心特性

1 .MVC

<!doctype html>
<html ng-app>
<head>
<meta charset="utf-8">
</head>
<body>
<!-- ng-controller我們的控制器 ng-controller賦值成HelloAngular -->
<div ng-controller="HelloAngular">
<!-- p標(biāo)簽充當(dāng)了視圖的功能 -->
<!-- {{greeting.text}}取值這個(gè)地方就是充當(dāng)數(shù)據(jù)模型 -->
<p>{{greeting.text}},Angular</p>
</div>
</body>
<!-- 導(dǎo)入了angular-1.3.0.js文件 -->
<script src="js/angular-1.3.0.js"></script>
<script type="text/javascript">
//HelloAngular這個(gè)函數(shù)充當(dāng)了控制器
function HelloAngular($scope) {
$scope.greeting = {
text: 'Hello'
};
}
</script>
</html>
運(yùn)行效果

2. 模塊化
html
<!doctype html>
<html ng-app="HelloAngular">
<head>
<meta charset="utf-8">
</head>
<body>
<div ng-controller="helloAngular">
<p>{{greeting.text}},Angular</p>
</div>
</body>
<script src="js/angular-1.3.0.js"></script>
<script src="HelloAngular_Module.js"></script>
</html>
javascript
//這里調(diào)用了angular.module方法
var myModule = angular.module("HelloAngular", []);
myModule.controller("helloAngular", ['$scope',
function HelloAngular($scope) {
$scope.greeting = {
text: 'Hello'
};
}
]);
運(yùn)行效果

在HelloAngular_Module.js文件中調(diào)用了angular.module方法,然后給他一個(gè)字符串“HelloAngular”,后面還傳了方括號空數(shù)組,通過字面量看出這是在定義一個(gè)模塊,var myModule是一個(gè)模塊,定義完模塊后在模塊上面調(diào)用了一個(gè)controller方法很顯然這是告訴angular要生成一個(gè)控制器"helloAngular"是控制器的名稱,后面方括號里面第一個(gè)參數(shù)'$scope'是告訴angularjs幫我注入'$scope'。

AngularJS概念有Module,有Directive,有Filter,其實(shí)一點(diǎn)要抓住一個(gè)點(diǎn),一切都是從模塊開始的,在AngularJS開發(fā)中首先想到的是模塊也就是Module,其他所有的東西其實(shí)都是掛在Module下面的,因?yàn)橹挥邪涯K創(chuàng)建后你才能在模塊上去調(diào)用Service,controller等方法,所以首先想到的是模塊,
3. 指令系統(tǒng)
html
<!doctype html>
<html ng-app="MyModule">
<head>
<meta charset="utf-8">
</head>
<body>
<hello></hello>
</body>
<script src="js/angular-1.3.0.js"></script>
<script src="HelloAngular_Directive.js"></script>
</html>
javascript
var myModule = angular.module("MyModule", []);
myModule.directive("hello", function() {
return {
restrict: 'E',
template: '<div>Hi everyone!</div>',
replace: true
}
});
運(yùn)行效果

看看body表情內(nèi)的<hello></hello>標(biāo)簽,很顯然瀏覽器是不認(rèn)識這個(gè)標(biāo)簽的,不認(rèn)識他在默認(rèn)情況下瀏覽器會(huì)忽略他,Angular js就會(huì)想一下怎樣能讓瀏覽器認(rèn)識這個(gè)標(biāo)簽?zāi)兀@就需要借助Angular js的Directive這個(gè)特性,
一切都是從模塊開始的,所以我們需要?jiǎng)?chuàng)建模塊
var myModule = angular.module("MyModule", []);
var myModule = angular.module("MyModule", []);
myModule.directive("hello", function() {
return {
restrict: 'E',
template: '<div>Hi everyone!</div>',
replace: true
}
});
模塊創(chuàng)建好再調(diào)用模塊上面directive方法,這個(gè)方法也有兩個(gè)參數(shù)"hello"是指令的名稱,也就是對應(yīng)的標(biāo)簽名,后面是一個(gè)函數(shù),這個(gè)函數(shù)就是生成標(biāo)簽的, template: '<div>Hi everyone!</div>',

最終hello是被替換成模板template,
這個(gè)就是angular的指令
我們可以自定義一大堆的指令然后做一些封裝我們在調(diào)用的時(shí)候會(huì)非常方便,當(dāng)然指令不只是定義標(biāo)簽這么簡單,還有很多其他功能,比如說
<!doctype html>
<html ng-app="MyModule">
<head>
<meta charset="utf-8">
</head>
<body>
<hello></hello>
</body>
<script src="js/angular-1.3.0.js"></script>
<script src="HelloAngular_Directive.js"></script>
</html>
我們在html里面ng-app="MyModule",這個(gè)實(shí)際上就是一個(gè)指令,這里復(fù)制ng-app等于"MyModule"
"MyModule"在var myModule = angular.module("MyModule", []);js里,很顯然是告訴Angular js要去使用我們這個(gè)模塊,ng-app意思和C語言里的main或者是java里面的main方法。
Angular js檢測到ng-app這個(gè)指令的時(shí)候就知道我從ng-app這個(gè)指令開始內(nèi)部的標(biāo)簽內(nèi)容就歸我Angular js來管了,也就是說Angular js從ng-app這個(gè)地方啟動(dòng)的,可以想象既然是main函數(shù)main方法,一個(gè)應(yīng)用里面顯然只能有一個(gè),所以在任意一個(gè)單頁Angular js應(yīng)用里面ng-app這個(gè)指令只能出現(xiàn)一次。

4. 雙向數(shù)據(jù)綁定
Angular js 是實(shí)現(xiàn)了雙向數(shù)據(jù)綁定,其他的前端框架都沒有實(shí)現(xiàn)這樣一個(gè)特性,目前大多數(shù)前端框架都是實(shí)現(xiàn)單向數(shù)據(jù)綁定。
來看看單向數(shù)據(jù)綁定的流程

首先是我們把模板寫好,再加上數(shù)據(jù),數(shù)據(jù)可能是從后臺服務(wù)端讀進(jìn)來的,模板和數(shù)據(jù)結(jié)合在一起,通過數(shù)據(jù)綁定機(jī)制生成一段html標(biāo)簽然后把這段標(biāo)簽插入到文檔流里面,這是經(jīng)典單向數(shù)據(jù)綁定的處理流程。
html一旦生成完以后就沒法再變了,當(dāng)有新的數(shù)據(jù)的時(shí)候我們只能重新再來一遍。
Angular js認(rèn)為單向數(shù)據(jù)綁定的過程實(shí)在是不怎么優(yōu)雅,所以他覺得我應(yīng)該實(shí)現(xiàn)雙向數(shù)據(jù)綁定。

他的核心想法是這樣的,
視圖,數(shù)據(jù)是對應(yīng)的當(dāng)視圖上的內(nèi)容發(fā)生變化的時(shí)候他希望數(shù)據(jù)模型里面立刻發(fā)生變化,當(dāng)數(shù)據(jù)模型發(fā)生變化的時(shí)候視圖自己自動(dòng)會(huì)去更新,很顯然這里需要 借助一個(gè)事件機(jī)制。
在html里有什么樣的視圖會(huì)發(fā)生變化?表單。在很多的頁面中會(huì)出現(xiàn)很多的表單,表單是來收集用戶的輸入的,這些數(shù)據(jù)是非常容易變化的,在數(shù)據(jù)發(fā)生變化就會(huì)通過Angular js機(jī)制同步到數(shù)據(jù)模型上面。
html
<!doctype html>
<html ng-app>
<head>
<meta charset="utf-8">
</head>
<body>
<div>
<input ng-model="greeting.text"/>
<p>{{greeting.text}},AngularJS</p>
</div>
</body>
<script src="js/angular-1.3.0.js"></script>
</html>
運(yùn)行效果

上面代碼實(shí)現(xiàn)效果在input輸入框輸入任何東西底下的顯示框都會(huì)立刻顯示,
這是什么原理呢
<input ng-model="greeting.text"/>
<p>{{greeting.text}},AngularJS</p>
首先有一個(gè)輸入框
然后綁定了一個(gè)ng-model="greeting.text",
這個(gè)是時(shí)候底下有個(gè)p標(biāo)簽有個(gè)雙花括號來獲取greeting.text的值。
雙花括號是什么意思呢?
在Angular js里面是取值的意思,是一個(gè)取值表達(dá)式。