欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Angular ng-repeat遍歷渲染完頁(yè)面后執(zhí)行其他操作詳細(xì)介紹

 更新時(shí)間:2016年12月13日 11:12:31   投稿:lqh  
這篇文章主要介紹了Angular ng-repeat遍歷渲染完頁(yè)面后執(zhí)行其他操作詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下

Angular ng-repeat遍歷渲染

業(yè)務(wù)中有時(shí)需要在異步獲取數(shù)據(jù)并用ng-repeat遍歷渲染完頁(yè)面后執(zhí)行某個(gè)操作,angular本身并沒(méi)有提供監(jiān)聽(tīng)ng-repeat渲染完成的指令,所以需要自己動(dòng)手寫。有經(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í)例,我只寫了最重要的部分

//要循環(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)寫具體的業(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方法是專門執(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ì)本站的支持!

相關(guān)文章

  • AngularJS使用ocLazyLoad實(shí)現(xiàn)js延遲加載

    AngularJS使用ocLazyLoad實(shí)現(xiàn)js延遲加載

    這篇文章主要介紹了AngularJS使用ocLazyLoad實(shí)現(xiàn)js延遲加載的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • 詳解Angular2組件之間如何通信

    詳解Angular2組件之間如何通信

    本篇文章主要介紹了詳解Angular2組件之間如何通信,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-06-06
  • Angular2.0/4.0 使用Echarts圖表的示例代碼

    Angular2.0/4.0 使用Echarts圖表的示例代碼

    本篇文章主要介紹了Angular2.0/4.0 使用Echarts的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-12-12
  • AngularJs自定義服務(wù)之實(shí)現(xiàn)簽名和加密

    AngularJs自定義服務(wù)之實(shí)現(xiàn)簽名和加密

    AngularJS 是一個(gè) JavaScript 框架,它可以通過(guò) <script> 標(biāo)簽添加到 HTML 頁(yè)面。這篇文章主要介紹了AngularJs自定義服務(wù)之實(shí)現(xiàn)簽名和加密的相關(guān)資料,需要的朋友可以參考下
    2016-08-08
  • 詳細(xì)解讀AngularJS中的表單驗(yàn)證編程

    詳細(xì)解讀AngularJS中的表單驗(yàn)證編程

    這篇文章主要介紹了詳細(xì)解讀AngularJS中的表單驗(yàn)證編程,AngularJS是一個(gè)非常熱門的JavaScript庫(kù),需要的朋友可以參考下
    2015-06-06
  • AngularJs ng-route路由詳解及實(shí)例代碼

    AngularJs ng-route路由詳解及實(shí)例代碼

    這篇文章主要介紹了AngularJs ng-route路由,這里整理相關(guān)資料及簡(jiǎn)單實(shí)例代碼,有興趣的小伙伴可以參考下
    2016-09-09
  • Angular 中的路由詳解

    Angular 中的路由詳解

    路由是實(shí)現(xiàn)單頁(yè)面應(yīng)用的一種方式,通過(guò)監(jiān)聽(tīng)hash或者h(yuǎn)istory的變化,渲染不同的組件,起到局部更新的作用,避免每次URL變化都向服務(wù)器請(qǐng)求數(shù)據(jù),本文給大家介紹Angular 中的路由,感興趣的朋友一起看看吧
    2023-11-11
  • angular2+node.js express打包部署的實(shí)戰(zhàn)

    angular2+node.js express打包部署的實(shí)戰(zhàn)

    本篇文章主要介紹了angular2+node.js express打包部署的實(shí)戰(zhàn),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-07-07
  • angularjs實(shí)現(xiàn)的前端分頁(yè)控件示例

    angularjs實(shí)現(xiàn)的前端分頁(yè)控件示例

    本篇文章主要介紹了angularjs實(shí)現(xiàn)的前端分頁(yè)控件示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-02-02
  • angular5 httpclient的示例實(shí)戰(zhàn)

    angular5 httpclient的示例實(shí)戰(zhàn)

    本篇文章主要介紹了angular5 httpclient的示例實(shí)戰(zhàn),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-03-03

最新評(píng)論