1. 程式人生 > >AngularJs--ng-repeate渲染完畢後執行的程式碼

AngularJs--ng-repeate渲染完畢後執行的程式碼

AngularJs呈現頁面的原理
AnguarJs提供了一些對於Html進行加強的語義標籤(directive),這些標籤在瀏覽器載入完頁面後被執行。舉例來說:

<div ng-controller="ctrl2">
    <input type="text" ng-model="page">
    <div repeat-finish ng-repeat="i in [1,2,3,4,5]">
        {{i}}
        <div ng-repeat="j in [1,2,3,4]">
            <div
class="a
{{i}}b{{j}}"> son:{{i}}b{{j}} </div> </div> </div> </div>

上面的ng-repeat,就是一個directive, 相當於一個for迴圈。在頁面載入完成後,AngularJs會遍歷users資料物件,來呈現(render)出這個table中的內容。

如何實現在render完成之後,執行Js指令碼
當我們使用Jquery結合AngulraJs使用的時候,希望在render完table後,執行一段js指令碼,把JqTable應用到該table上。在實際開發中,會經常碰到這樣的需求,希望能夠捕獲到AngularJs渲染完成頁面的事件。
要達到這個目的,我們需要為當前的app自定義directive:

app.directive("repeatFinish",function ($timeout) {
    return function ($scope, $element,$attrs) {
        if($scope.$last==true){
            $element.append("<hr/>");
            $timeout(function() {
                $scope.$emit('ngRepeatFinished');
            });
        }
    }
})

最後,補充上我們需要render完成之後的Js指令碼:

app.controller('ctrl2',function ($scope) {
    $scope.page = 'b2'
    $scope.$on('ngRepeatFinished', function () {
        $scope.$watch("page",function () {
            for(var i=1; i<=5;i++){
                $(".a"+i+$scope.page).css("background","yellow");
            }
        })
    });
});