Angular ng-repeat遍歷渲染完頁(yè)面后執(zhí)行其他操作詳細(xì)介紹
Angular ng-repeat遍歷渲染
業(yè)務(wù)中有時(shí)需要在異步獲取數(shù)據(jù)并用ng-repeat遍歷渲染完頁(yè)面后執(zhí)行某個(gè)操作,angular本身并沒(méi)有提供監(jiān)聽(tīng)ng-repeat渲染完成的指令,所以需要自己動(dòng)手寫(xiě)。有經(jīng)驗(yàn)的同學(xué)都應(yīng)該知道,在ng-repeat模板實(shí)例內(nèi)部會(huì)暴露出一些特殊屬性$index/$first/$middle/$last/$odd/$even,$index會(huì)隨著每次遍歷(從0開(kāi)始)遞增,當(dāng)遍歷到最后一個(gè)時(shí),$last的值為true,so,通過(guò)判斷$last的值來(lái)監(jiān)聽(tīng)ng-repeat的執(zhí)行狀態(tài),怎么在遍歷過(guò)程中拿到$last的值:自定義指令
小實(shí)例,我只寫(xiě)了最重要的部分
//要循環(huán)的數(shù)據(jù)
$scope.data = [
{
str: 'a'
},
{
str: 'b'
},
{
str: 'c'
}
]
//自定義指令repeatFinish
app.directive('repeatFinish',function(){
return {
link: function(scope,element,attr){
console.log(scope.$index)
if(scope.$last == true){
console.log('ng-repeat執(zhí)行完畢')
}
}
}
})
<div id="box">
<span ng-repeat="item in data" repeat-finish>{{item.str}}</span>
</div>
打開(kāi)控制臺(tái),會(huì)打印出0,1,2,當(dāng)$index = 2點(diǎn)時(shí)候,$last值為true,ng-repeat渲染完畢
so easy!
當(dāng)然指令最好是能夠復(fù)用,在這個(gè)指令內(nèi)寫(xiě)具體的業(yè)務(wù)邏輯不利于復(fù)用,可以通過(guò)給指令指定一個(gè)處理函數(shù)renderFinish
<div id="box">
<span ng-repeat="item in data" repeat-finish="renderFinish()">{{item.str}}</span>
</div>
再通過(guò)指令的attr參數(shù)獲取這個(gè)處理函數(shù)
app.directive('repeatFinish',function(){
return {
link: function(scope,element,attr){
console.log(scope.$index)
if(scope.$last == true){
console.log('ng-repeat執(zhí)行完畢')
scope.$eval( attr.repeatFinish )
}
}
}
})
//controller里對(duì)應(yīng)的處理函數(shù)
$scope.renderFinish = function(){
console.log('渲染完之后的操作')
}
attr獲取到的屬性只是一個(gè)字符串表達(dá)式,$scope.$eval方法是專門(mén)執(zhí)行AngularJS表達(dá)式的,通過(guò)它處理函數(shù)得以執(zhí)行,這樣,指令用在不同的地方,可傳遞不同的處理函數(shù)。
有些業(yè)務(wù)比較復(fù)雜,可能ng-repeat渲染完成之后,需要執(zhí)行多個(gè)操作并且這多個(gè)操作有多個(gè)前端完成,需要用到angular的事件,在repeatFinish指令的link函數(shù)內(nèi)觸發(fā)一個(gè)事件,各位前端同學(xué)監(jiān)聽(tīng)該事件完成各自的操作
app.directive('repeatFinish',function(){
return {
link: function(scope,element,attr){
console.log(scope.$index)
if(scope.$last == true){
console.log('ng-repeat執(zhí)行完畢')
//向父控制器傳遞事件
scope.$emit('to-parent');
//向子控制器傳遞事件
scope.$broadcast('to-child');
}
}
}
})
//父控制器中監(jiān)聽(tīng)事件
$scope.$on('to-parent',function(){
//父控制器執(zhí)行操作
})
//子控制器中監(jiān)聽(tīng)事件
$scope.$on('to-child',function(){
//子控制器執(zhí)行操作
})
如何在當(dāng)前控制器下監(jiān)聽(tīng)到該事件呢?angular沒(méi)有向當(dāng)前控制器傳遞事件的方法,可以先向父(子)控制器傳遞事件,父(子)控制器監(jiān)聽(tīng)到事件后反過(guò)來(lái)向子(父)控制器傳遞事件。
一句話總結(jié):指令是angular的核心功能之一,用好了事半功倍,監(jiān)聽(tīng)ng-repeat執(zhí)行狀態(tài)僅僅是它功能的冰山一角吧
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
- Angularjs通過(guò)指令監(jiān)聽(tīng)ng-repeat渲染完成后執(zhí)行腳本的方法
- AngularJs ng-repeat 嵌套如何獲取外層$index
- AngularJS 獲取ng-repeat動(dòng)態(tài)生成的ng-model值實(shí)例詳解
- AngularJS入門(mén)(用ng-repeat指令實(shí)現(xiàn)循環(huán)輸出
- Angularjs的ng-repeat中去除重復(fù)數(shù)據(jù)的方法
- AngularJS使用ng-repeat指令實(shí)現(xiàn)下拉框
- AngularJS使用自定義指令替代ng-repeat的方法
- AngularJS基礎(chǔ) ng-repeat 指令簡(jiǎn)單示例
- Angularjs渲染的 using 指令的星級(jí)評(píng)分系統(tǒng)示例
- Angular.js中下拉框?qū)崿F(xiàn)渲染html的方法
- Angular將填入表單的數(shù)據(jù)渲染到表格的方法
- AngularJS監(jiān)聽(tīng)ng-repeat渲染完成的兩種方法
相關(guān)文章
ionic3+Angular4實(shí)現(xiàn)接口請(qǐng)求及本地json文件讀取示例
本篇文章主要介紹了ionic3+Angular4實(shí)現(xiàn)接口請(qǐng)求及本地json文件讀取示例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-10-10
AngularJs 最新驗(yàn)證手機(jī)號(hào)碼的實(shí)例,成功測(cè)試通過(guò)
下面小編就為大家分享一篇AngularJs 最新驗(yàn)證手機(jī)號(hào)碼的實(shí)例,成功測(cè)試通過(guò),具有很好的參考價(jià)值。希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2017-11-11
AngularJS框架的ng-app指令與自動(dòng)加載實(shí)現(xiàn)方法分析
這篇文章主要介紹了AngularJS框架的ng-app指令與自動(dòng)加載實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了ng-app指令的功能及自動(dòng)加載機(jī)制的實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-01-01
AngularJS入門(mén)知識(shí)之MVW類框架的編程思想探討
這篇文章主要介紹了AngularJS入門(mén)知識(shí)之MVW類框架的編程思想探討,本文通過(guò)實(shí)現(xiàn)兩個(gè)簡(jiǎn)單的業(yè)務(wù)需求,探討AngularJS和傳統(tǒng)的JavaScript控制DOM實(shí)現(xiàn)方式的差別,并嘗試?yán)斫?MVW此類框架在流行的Web前端開(kāi)發(fā)中的編程思想,需要的朋友可以參考下2014-12-12
angula中使用iframe點(diǎn)擊后不執(zhí)行變更檢測(cè)的問(wèn)題
這篇文章主要介紹了angula中使用iframe點(diǎn)擊后不執(zhí)行變更檢測(cè)問(wèn)題,本文給大家分享解決方案,通過(guò)實(shí)例代碼給的大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05
angular+webpack2實(shí)戰(zhàn)例子
本篇文章主要介紹了angular+webpack2實(shí)戰(zhàn)例子,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-05-05
Angular6升級(jí)到Angular8報(bào)錯(cuò)問(wèn)題的解決合集
這篇文章主要介紹了Angular6升級(jí)到Angular8報(bào)錯(cuò)問(wèn)題的解決合集,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03

