AngularJS入門(mén)心得之directive和controller通信過(guò)程
AngularJS 通過(guò)新的屬性和表達(dá)式擴(kuò)展了 HTML。Angularjs學(xué)習(xí)起來(lái)也非常的簡(jiǎn)單。
1.AngularJS是何方神圣
Angular JS (Angular.JS) 是一組用來(lái)開(kāi)發(fā)Web頁(yè)面的框架、模板以及數(shù)據(jù)綁定和豐富UI組件。它支持整個(gè)開(kāi)發(fā)進(jìn)程,提供web應(yīng)用的架構(gòu),無(wú)需進(jìn)行手工DOM操作。
AngularJS是為了克服HTML在構(gòu)建應(yīng)用上的不足而設(shè)計(jì)的。HTML是一門(mén)很好的為靜態(tài)文本展示設(shè)計(jì)的聲明式語(yǔ)言,但要構(gòu)建WEB應(yīng)用的話它就顯得乏力了。這里AngularJS就應(yīng)運(yùn)而生,彌補(bǔ)了HTML的天然缺陷,用于構(gòu)件Web應(yīng)用等。
2.如何了解AngularJS
AngularJS誕生于2009年,由Misko Hevery 等人創(chuàng)建,后為Google所收購(gòu)。
AngularJS官網(wǎng) : http://www.angularjs.org (一般來(lái)說(shuō)會(huì)被墻掉,所以可以訪問(wèn)下面的網(wǎng)站)
AngularJS中文網(wǎng)站 : http://www.ngnice.com
書(shū)籍 :《AngularJS 權(quán)威教程》《用AngularJS開(kāi)發(fā)下一代Web應(yīng)用》等。個(gè)人意見(jiàn),F(xiàn)or your information
備注 :視頻教程,最近有看過(guò)大漠老師的AngularJS教程,覺(jué)得還不錯(cuò),但是感覺(jué)沒(méi)有一點(diǎn)基礎(chǔ)還是聽(tīng)不懂的,或者要看好幾遍(不是做廣告)
3.為什么要了解AngularJS
一項(xiàng)新技術(shù)能夠面世,為眾人所知,從而脫引而出,定然不是空穴來(lái)風(fēng),肯定有其標(biāo)新立異的過(guò)人之處,主要有以下幾點(diǎn):
(1)MVC的思想(或者是MVVM)
(2)模塊化和依賴(lài)注入
(3)雙向數(shù)據(jù)綁定
(4)指令
每一個(gè)特性都可以大篇幅的展開(kāi),顯然,目前能力不夠,沒(méi)法展開(kāi),有興趣可以網(wǎng)上搜下,大體了解。
今天主要來(lái)說(shuō)說(shuō)AngularJS的三個(gè)指令“ @ ”,“ = ”,“ & ”的用法和區(qū)別(這個(gè)問(wèn)題困擾了我大半天,和Frank交流多次,我才明白)
1.指令作用域中的@
作用是把當(dāng)前屬性作為字符串傳遞。
先上代碼,前臺(tái)界面:
<!doctype html>
<html ng-app="MyModule">
<head>
<meta charset="utf-">
<link rel="stylesheet" href="../css/bootstrap.css">
</head>
<body>
<div ng-controller="MyCtrl">
<drink water="{{pureWater}}"></drink>
</div>
</body>
<script src="../js/angular.js">
<script src="ScopeAt.js"></script>
</html>
JS代碼:
var myModule = angular.module("MyModule", []);
myModule.controller('MyCtrl', ['$scope', function($scope){
$scope.pureWater="純凈水";
}])
myModule.directive("drink", function() {
return {
restrict:'AE',
scope:{
water:'@'
},
template:"<div>{{water}}</div>"
}
});
執(zhí)行的結(jié)果平淡無(wú)奇,卻暗藏玄機(jī):

(1) HTML頁(yè)面中,聲明一個(gè)標(biāo)簽<drink></drink>,其中定義一個(gè)屬性名:water 屬性值:pureWater(這里的{{}}是angularjs的一種常見(jiàn)表達(dá)式,類(lèi)似于ng-model,用于值綁定)
(2) JS文件中,首先從模塊開(kāi)始,然后創(chuàng)建一個(gè)控制器行2~行4,再定義一個(gè)指令,主要實(shí)現(xiàn)的是將"<drink></drink>"替換為"<div>{{water}}</div>"標(biāo)簽顯示
(3) 重點(diǎn)介紹這里的
scope:{
water:'@'
}
該表達(dá)式等價(jià)于:
link:function(scope,element,attrs){
scope.water=attrs.water;
}
具體含義就是在指令的scope上定義一個(gè)屬性名:water,它的值就是前臺(tái)界面中water屬性的值,也就是"{{pureWater}}";
同時(shí){{pureWater}}的值我們從聲明的控制器可以看出:
$scope.pureWater="純凈水";
所以最終頁(yè)面顯示的是“純凈水”,主要的流程就是:
a.在指令中,通過(guò)@實(shí)現(xiàn)指令與HTML頁(yè)面元素關(guān)聯(lián);
b.在控制器中又實(shí)現(xiàn)了與頁(yè)面的聯(lián)系;
c.從而借助HTML頁(yè)面建立起控制器與指令的聯(lián)系,也是一種通訊方式。
具體見(jiàn)下圖:
2.指令作用域中的=
作用是與父scope中的屬性進(jìn)行雙向綁定。
<!doctype html>
<html ng-app="MyModule">
<head>
<meta charset="utf-">
<link rel="stylesheet" href="../css/bootstrap.css">
</head>
<body>
<div ng-controller="MyCtrl">
Ctrl:
<br>
<input type="text" ng-model="pureWater">
<br>
Directive:
<br>
<drink water="pureWater"></drink>
</div>
</body>
<script src="../js/angular.js"></script>
<script src="ScopeEqual.js"></script>
</html>
var myModule = angular.module("MyModule", []);
myModule.controller('MyCtrl', ['$scope', function($scope){
$scope.pureWater="純凈水";
}])
myModule.directive("drink", function() {
return {
restrict:'AE',
scope:{
water:'='
},
template:'<input type="text" ng-model="water"/>'
}
});
這里=的手段類(lèi)似,通過(guò)頁(yè)面設(shè)置兩個(gè)輸入框,分別代表指令和控制器的作用域,在JS代碼實(shí)現(xiàn)了雙向綁定,做到了控制器與指令在各自作用域內(nèi)能夠影響對(duì)方,也就是雙向通信,具體思路與@類(lèi)似,不贅述,上圖:

3.指令作用域中的&
主要作用是傳遞一個(gè)來(lái)自父scope的函數(shù),稍后調(diào)用。
<!doctype html>
<html ng-app="MyModule">
<head>
<meta charset="utf-">
<link rel="stylesheet" href="../css/bootstrap.css">
</head>
<body>
<div ng-controller="MyCtrl">
<greeting greet="sayHello(name)"></greeting>
<greeting greet="sayHello(name)"></greeting>
<greeting greet="sayHello(name)"></greeting>
</div>
</body>
<script src="../js/angular.js"></script>
<script src="ScopeAnd.js"></script>
</html>
var myModule = angular.module("MyModule", []);
myModule.controller('MyCtrl', ['$scope', function($scope){
$scope.sayHello=function(name){
alert("Hello "+name);
}
}])
myModule.directive("greeting", function() {
return {
restrict:'AE',
scope:{
greet:'&'
},
template:'<input type="text" ng-model="userName" /><br/>'+
'<button class="btn btn-default" ng-click="greet({name:userName})">Greeting</button><br/>'
}
});
從頁(yè)面可以看出,這里定義了一個(gè)標(biāo)簽<greeting></greeting>,并在其中定義了屬性名greet,與上面的@以及=不同的是,屬性名后面是一個(gè)方法,所以,這里的&主要用于在Controller和directive之間傳遞函數(shù),實(shí)現(xiàn)兩者之間的函數(shù)通信,在JS中,將前臺(tái)的greeting標(biāo)簽替換為template中的內(nèi)容,一個(gè)輸入框加上一個(gè)按鈕,按鈕上綁定了greet函數(shù),與前臺(tái)頁(yè)面的greet相呼應(yīng),而前臺(tái)的greet函數(shù)在控制器中有定義,所以指令中也是調(diào)用的控制器中的greet函數(shù)。執(zhí)行結(jié)果如下:
(1)初始界面
(2)在第一個(gè)文本框填值
(2)在第二個(gè)文本框填值
(3)在第三個(gè)文本框填值
- AngularJS控制器之間的通信方式詳解
- AngularJS控制器controller正確的通信的方法
- AngularJS控制器之間的數(shù)據(jù)共享及通信詳解
- AngularJS開(kāi)發(fā)教程之控制器之間的通信方法分析
- 詳解AngularJS的通信機(jī)制
- angular中不同的組件間傳值與通信的方法
- AngularJS全局scope與Isolate scope通信用法示例
- Angularjs的Controller間通信機(jī)制實(shí)例分析
- Angular2 父子組件通信方式的示例
- Angularjs實(shí)現(xiàn)控制器之間通信方式實(shí)例總結(jié)
相關(guān)文章
angularjs select 賦值 ng-options配置方法
下面小編就為大家分享一篇angularjs select 賦值 ng-options配置方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-02-02
Angular實(shí)現(xiàn)的日程表功能【可添加及隱藏顯示內(nèi)容】
這篇文章主要介紹了Angular實(shí)現(xiàn)的日程表功能,帶有向日程表中添加內(nèi)容及隱藏顯示內(nèi)容的功能,涉及AngularJS事件響應(yīng)及頁(yè)面元素動(dòng)態(tài)操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-12-12
解析AngularJS中g(shù)et請(qǐng)求URL出現(xiàn)的跨域問(wèn)題
本文主要介紹了AngularJS中g(shù)et請(qǐng)求URL出現(xiàn)跨域問(wèn)題。需要的朋友可以參考下2016-12-12
Angular統(tǒng)一注入器unified injector簡(jiǎn)化依賴(lài)關(guān)系管理
這篇文章主要為大家介紹了Angular統(tǒng)一注入器unified injector簡(jiǎn)化依賴(lài)關(guān)系管理的使用方法實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10
Angularjs之如何在跨域請(qǐng)求中傳輸Cookie的方法
跨域傳輸Cookie是需要后臺(tái)和前臺(tái)同時(shí)做相關(guān)處理才能解決的,這篇文章主要介紹了Angularjs之如何在跨域請(qǐng)求中傳輸Cookie的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-06-06
AngularJS 實(shí)現(xiàn)購(gòu)物車(chē)全選反選功能
這篇文章主要介紹了AngularJS 實(shí)現(xiàn)購(gòu)物車(chē)全選反選功能,需要的朋友可以參考下2017-10-10
實(shí)例詳解AngularJS實(shí)現(xiàn)無(wú)限級(jí)聯(lián)動(dòng)菜單
這篇文章主要介紹了實(shí)例詳解AngularJS實(shí)現(xiàn)無(wú)限級(jí)聯(lián)動(dòng)菜單的相關(guān)資料,需要的朋友可以參考下2016-01-01
angular 實(shí)現(xiàn)同步驗(yàn)證器跨字段驗(yàn)證的方法
幾乎每個(gè)web應(yīng)用都會(huì)用到表單,那么驗(yàn)證器就是必不可少的東西,這篇文章主要介紹了angular 實(shí)現(xiàn)同步驗(yàn)證器跨字段驗(yàn)證的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-04-04

