詳解angularJs指令的3種綁定策略
今天,我來(lái)談?wù)刟ngularJs指令的3種綁定策略。
公司最近大量使用angularJs做單頁(yè)面應(yīng)用,就免不了使用angularJs的一些組件,而有的組件網(wǎng)上有現(xiàn)成的,不必操心,而有的就得自食其力,先前對(duì)指令這一塊的封裝一直理解的不夠,故每次使用directive時(shí)抽象性都做得不好,往往移植性很差,而要將抽象做好,就不得不使用指令中的隔離作用域,而光有隔離作用域又不能做好前后文的通信問(wèn)題,要解決通信的問(wèn)題,就要使用指令中的綁定,正好最近要用,順便就整理了一些關(guān)于指令中的3種綁定策略,并談了一些自己的理解。
angularJs中指令scope隔離域綁定有3種策略:如
.directive("abc",function(){
return {
scope:{
title:"@",
name:"=",
changeNum:"&"
}
/* 出現(xiàn)了scope就表示這個(gè)指令的scope是獨(dú)立的,但如果要與外界聯(lián)系,就要使用綁定策略*/
/*使用@符號(hào)可將本地作用域的變量與DOM屬性的值進(jìn)行綁定,即我們通過(guò)@得到title屬性的值*/
/*使用=符號(hào)可將本地作用域上的屬性與父級(jí)作用域上的屬性進(jìn)行雙向綁定,即我們通過(guò)=得到name的引用??梢酝祩鬟f和引用傳遞的理解相結(jié)合*/
/*使用&符號(hào)可以對(duì)父級(jí)作用域進(jìn)行綁定,以便在其中運(yùn)行函數(shù),簡(jiǎn)單說(shuō)就是綁定函數(shù)用的*/
}
})
舉一個(gè)詳細(xì)的例子:
HTML:
<div ng-controller="test">
<div>AngularJs指令的三種綁定策略</div>
<example title="titleExample" name="nameExample" send-message="parentSendMessage('example')">
</example>
</div>
說(shuō)明:example是自定義的指令,用以展示指令的三種綁定策略。
使用@來(lái)綁定title,以獲取DOM中的屬性值。
directive:
myApp.directive("example",function(){
return {
restrict:"E",
scope:{
title:"@",
},
link:function($scope,element,attrs){
console.log($scope.title); ==> titleExample
}
}
})
說(shuō)明:@綁定策略,可以將title值與父級(jí)作用域的值綁定,比如父級(jí)作用域有一個(gè)屬性是testTitle,我們想將指令中的title屬性的值與父級(jí)作用域中testTitle的值綁定,故我們可以在HTML將指令改寫(xiě)成<example title={{testTitle}}></example>,這樣我們就可以在.directive中通過(guò)子作用域中的$scope.title獲取到父級(jí)作用域$scope.testTitle的值。
使用=來(lái)綁定name,以將子作用域與父作用域的屬性進(jìn)行雙向綁定。
directive:
myApp.directive("example",function(){
return {
restrict:"E",
scope:{
name:"=",
},
link:function($scope,element,attrs){
console.log($scope.name); ==> nameTest
}
}
})
//父級(jí)作用域的控制器
controller:
myApp.controller("test",function($scope){
$scope.nameExample = "nameTest"
})
說(shuō)明:在實(shí)際生產(chǎn)中,這一綁定策略十分有效,譬如說(shuō),假定我在指令中要返回一個(gè)對(duì)象給父級(jí)作用域,這時(shí)通過(guò)“@"這一"值傳遞"方法已經(jīng)不能滿足需求了,此時(shí)就應(yīng)該考慮"="這一"引用傳遞",因?yàn)橥ㄟ^(guò)name="nameExample"這一聲明,就將子作用域的$scope.name與父作用域的$scope.nameExample綁定在一起,可以認(rèn)為他們指向同一地址,不論修改哪個(gè)都會(huì)影響對(duì)方。
使用&來(lái)綁定sendMessage ,以將子作用域與父作用域的方法進(jìn)行綁定。
directive:
myApp.directive("example",function(){
return {
restrict:"E",
scope:{
sendMessage:"&",
},
link:function($scope,element,attrs){
}
}
})
//父級(jí)作用域的控制器
controller:
myApp.controller("test",function($scope){
$scope.parentSendMessage = function(content){
alert(content);
}
})
說(shuō)明:可以看到"&"綁定就是讓子作用域可以使用父級(jí)作用域中的方法,這樣就可以利用父級(jí)作用域$scope.parentSendMessage ()中的一些數(shù)據(jù)進(jìn)行運(yùn)算,并將結(jié)果返回給子作用域$scope.sendMessage() 。
希望這篇淺見(jiàn)能對(duì)你了解指令隔離域的3種綁定策略有些許幫助!也希望大家多多支持腳本之家。
相關(guān)文章
Angular使用動(dòng)態(tài)加載組件方法實(shí)現(xiàn)Dialog的示例
這篇文章主要介紹了Angular使用動(dòng)態(tài)加載組件方法實(shí)現(xiàn)Dialog的示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-05-05
詳解什么是@ngrx/store開(kāi)發(fā)包中的MemoizedSelector
這篇文章主要為大家介紹了@ngrx/store開(kāi)發(fā)包中的MemoizedSelector使用分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07
angular使用TweenMax動(dòng)畫(huà)庫(kù)的問(wèn)題和解決方法
這篇文章主要給大家介紹了關(guān)于angular使用TweenMax的相關(guān)問(wèn)題和解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03
Angular 2父子組件之間共享服務(wù)通信的實(shí)現(xiàn)
這篇文章主要給大家介紹了關(guān)于Angular 2父子組件之間共享服務(wù)通信的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-07-07
解決angular雙向綁定無(wú)效果,ng-model不能正常顯示的問(wèn)題
今天小編就為大家分享一篇解決angular雙向綁定無(wú)效果,ng-model不能正常顯示的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-10-10
Angular移動(dòng)端頁(yè)面input無(wú)法輸入的解決方法
下面小編就為大家?guī)?lái)一篇Angular移動(dòng)端頁(yè)面input無(wú)法輸入的解決方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-11-11
詳解Angular 4.x NgTemplateOutlet
這篇文章主要介紹了詳解Angular 4.x NgTemplateOutlet,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-05-05
Angular項(xiàng)目中$scope.$apply()方法的使用詳解
這篇文章主要給大家介紹了關(guān)于Angular項(xiàng)目中$scope.$apply()方法使用的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Angularjs具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編一起來(lái)看看吧。2017-07-07
Angularjs的ng-repeat中去除重復(fù)數(shù)據(jù)的方法
這篇文章主要介紹了Angularjs的ng-repeat中去除重復(fù)數(shù)據(jù)的方法,涉及AngularJS針對(duì)重復(fù)數(shù)據(jù)的遍歷與過(guò)濾技巧,需要的朋友可以參考下2016-08-08
AngularJS模塊學(xué)習(xí)之Anchor Scroll
這篇文章主要介紹了AngularJS模塊學(xué)習(xí)之Anchor Scroll 的相關(guān)資料,需要的朋友可以參考下2016-01-01

