AngularJs--ng-repeate渲染完畢後執行的程式碼
阿新 • • 發佈:2019-02-03
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");
}
})
});
});