最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Angularjs通過指令監(jiān)聽ng-repeat渲染完成后執(zhí)行腳本的方法

 更新時間:2016年12月31日 10:34:36   作者:古德God  
指令是angular的核心功能之一,用好了事半功倍,監(jiān)聽ng-repeat執(zhí)行狀態(tài)僅僅是它功能的冰山一角吧。下面這篇文章主要介紹了Angularjs通過指令監(jiān)聽ng-repeat渲染完成后執(zhí)行腳本的方法,需要的朋友可以參考下。

前言

在用AngularJS期間, 經(jīng)常用到ng-repeat, 業(yè)務(wù)中有時需要在異步獲取數(shù)據(jù)并用ng-repeat遍歷渲染完頁面后執(zhí)行某個操作,angular本身并沒有提供監(jiān)聽ng-repeat渲染完成的指令,所以需要自己動手寫。有經(jīng)驗的同學(xué)都應(yīng)該知道,在ng-repeat模板實例內(nèi)部會暴露出一些特殊屬性$index/$first/$middle/$last/$odd/$even$index會隨著每次遍歷(從0開始)遞增,當(dāng)遍歷到最后一個時,$last的值為true,so,通過判斷$last的值來監(jiān)聽ng-repeat的執(zhí)行狀態(tài),怎么在遍歷過程中拿到$last的值:自定義指令

小實例,我只寫了最重要的部分

//要循環(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>

打開控制臺,會打印出0,1,2,當(dāng)$index = 2點時候,$last值為true,ng-repeat渲染完畢

so easy!

當(dāng)然指令最好是能夠復(fù)用,在這個指令內(nèi)寫具體的業(yè)務(wù)邏輯不利于復(fù)用,可以通過給指令指定一個處理函數(shù)renderFinish

<div id="box">
 <span ng-repeat="item in data" repeat-finish="renderFinish()">{{item.str}}</span>
</div>

再通過指令的attr參數(shù)獲取這個處理函數(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里對應(yīng)的處理函數(shù)
$scope.renderFinish = function(){
 console.log('渲染完之后的操作')
}

attr獲取到的屬性只是一個字符串表達(dá)式,$scope.$eval方法是專門執(zhí)行AngularJS表達(dá)式的,通過它處理函數(shù)得以執(zhí)行,這樣,指令用在不同的地方,可傳遞不同的處理函數(shù)。

有些業(yè)務(wù)比較復(fù)雜,可能ng-repeat渲染完成之后,需要執(zhí)行多個操作并且這多個操作有多個前端完成,需要用到angular的事件,在repeatFinish指令的link函數(shù)內(nèi)觸發(fā)一個事件,各位前端同學(xué)監(jiān)聽該事件完成各自的操作

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)聽事件
$scope.$on('to-parent',function(){
 //父控制器執(zhí)行操作
})

//子控制器中監(jiān)聽事件
$scope.$on('to-child',function(){
 //子控制器執(zhí)行操作
})

如何在當(dāng)前控制器下監(jiān)聽到該事件呢?angular沒有向當(dāng)前控制器傳遞事件的方法,可以先向父(子)控制器傳遞事件,父(子)控制器監(jiān)聽到事件后反過來向子(父)控制器傳遞事件。

補(bǔ)充:IE8可以直接在元素上用指令ng-if="$last && renderFinish()" ,當(dāng)然IE8+也可以這樣用

總結(jié)

以上就是利用angular指令監(jiān)聽ng-repeat渲染完成后執(zhí)行腳本的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。

相關(guān)文章

  • Javascript基礎(chǔ)_標(biāo)記文字的實現(xiàn)方法

    Javascript基礎(chǔ)_標(biāo)記文字的實現(xiàn)方法

    下面小編就為大家?guī)硪黄狫avascript基礎(chǔ)_標(biāo)記文字的實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-06-06
  • Angular使用Restful的增刪改

    Angular使用Restful的增刪改

    今天小編就為大家分享一篇關(guān)于Angular使用Restful的增刪改,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • angular基于ng-alain定義自己的select組件示例

    angular基于ng-alain定義自己的select組件示例

    這篇文章主要介紹了angular基于ng-alain定義自己的select組件示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-02-02
  • Angular2搜索和重置按鈕過場動畫

    Angular2搜索和重置按鈕過場動畫

    這篇文章主要介紹了Angular2搜索和重置按鈕過場動畫,需要的朋友可以參考下
    2017-05-05
  • 在AngularJS應(yīng)用中實現(xiàn)一些動畫效果的代碼

    在AngularJS應(yīng)用中實現(xiàn)一些動畫效果的代碼

    這篇文章主要介紹了在AngularJS應(yīng)用中實現(xiàn)一些動畫效果的代碼,AngularJS是一款熱門的JavaScript庫,需要的朋友可以參考下
    2015-06-06
  • 使用AngularJS對表單提交內(nèi)容進(jìn)行驗證的操作方法

    使用AngularJS對表單提交內(nèi)容進(jìn)行驗證的操作方法

    AngularJS是一款優(yōu)秀的前端JS框架,已經(jīng)被用于Google的多款產(chǎn)品當(dāng)中。下面通過本文給大家分享使用AngularJS對表單提交內(nèi)容進(jìn)行驗證的操作方法,需要的的朋友參考下吧
    2017-07-07
  • Angular刷新當(dāng)前頁面的實現(xiàn)方法

    Angular刷新當(dāng)前頁面的實現(xiàn)方法

    這篇文章主要介紹了Angular刷新當(dāng)前頁面的實現(xiàn)方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-11-11
  • Angularjs單選改為多選的開發(fā)過程及問題解析

    Angularjs單選改為多選的開發(fā)過程及問題解析

    在項目中遇到這樣的需求想把下拉框的單選改為多選,怎么實現(xiàn)呢?下面小編通過本文給大家分享angularjs單選改為多選的開發(fā)過程及問題解析,需要的朋友參考下
    2017-02-02
  • 如何使用angularJs

    如何使用angularJs

    本篇文章主要介紹了一些AngularJs常用的一些屬性和方法,具有很好的參考價值。下面跟著小編一起來看下吧
    2017-05-05
  • Angular實現(xiàn)的進(jìn)度條功能示例

    Angular實現(xiàn)的進(jìn)度條功能示例

    這篇文章主要介紹了Angular實現(xiàn)的進(jìn)度條功能,結(jié)合實例形式較為詳細(xì)的分析了angular進(jìn)度條功能的相關(guān)界面布局、功能等操作技巧,需要的朋友可以參考下
    2018-02-02

最新評論

福泉市| 阳城县| 呼伦贝尔市| 德庆县| 昆明市| 鸡西市| 周宁县| 肥城市| 庆云县| 马山县| 泽州县| 武乡县| 青铜峡市| 高雄市| 大方县| 穆棱市| 翁牛特旗| 康平县| 山阳县| 新沂市| 西乡县| 新绛县| 广灵县| 五寨县| 宁远县| 泉州市| 溆浦县| 汾阳市| 青河县| 游戏| 新疆| 南康市| 墨脱县| 都江堰市| 周口市| 渝北区| 枣强县| 房产| 延吉市| 郯城县| 垫江县|