angularjs 指令渲染完成后执行某个方法
angularjs 渲染页面时,有时需要根据远程接口返回的数据结构来渲染:
请求远程数据--》数据模型变化--》angularjs监控到模型变化--》重新渲染页面。
那么有时需要在有数据且页面被渲染完成后,再执行某个方法,如:
semnatic 的 accrodion:
<div class="ui accordion">
<div class="active title">
<i class="dropdown icon"></i>
菜单名称
</div>
<div class="active content">
<ul >
<li><a href="">菜单1</a>
<li><a href="">菜单2</a>
<li><a href="">菜单3</a>
<li><a href="">菜单4</a>
</ul>
</div>
<div class=" title">
<i class="dropdown icon"></i>
菜单名称
</div>
<div class=" content">
<ul >
<li><a href="">菜单1</a>
<li><a href="">菜单2</a>
<li><a href="">菜单3</a>
<li><a href="">菜单4</a>
</ul>
</div>
</div>
<script>
$('.ui.accordion') .accordion();
</script>需要执行accordion 方法才能显示出来。
通常菜单由数据来决定,改为angularjs 实现为:
<div ng-if="userModel.menuList.length>0" class="ui accordion " >
<div ng-repeat="menuDir in userModel.menuList" >
<div class="{{$first?'active':''}} title">
<i class="dropdown icon"></i>
{{menuDir.menuName}}
</div>
<div class="{{$first?'active':''}} content">
<ul ng-repeat="menu in menuDir.childrens">
<li ><a ui-sref="/views/{{menu.menuUrl}}"> {{menu.menuName}}</a></li>
</ul>
</div>
</div>
</div>页面在加载完后台数据,生成userModel.menuList数据,angularjs 监控到userModel.menuList数据变化,再渲染页面,在这执行完成后,再执行$('.ui.accordion') .accordion();,才能渲染出accordion校果。
那么如何实现在页面angularjs 渲染完成后,再执行方法呢?
一种指令实现的方式:
.directive('OnReanderFinsh',[function(){
return {
restrict:'A',
link:function ($scope, element, attrs, controller) {
var fun = $scope.$eval(attrs.OnReanderFinsh);//计算表达式的值
if(fun && typeof(fun)=='function'){
fun();
}
}
};
}]);html页中引入指令的js,在 ng-repeat一行中修改:
<div ng-repeat="menuDir in userModel.menuList" on-reander-finsh="renderAccordion">
controller中修改:
$scope.renderAccordion = function (){
$('.ui.accordion') .accordion();
};就是利用了一个指令完成(ng-repeat 渲染完成),再执行下一个指令的渲染顺序,来实现的。
相关推荐
xingdongfang 2019-11-10
zhenghao 2014-05-30
youyouzouzou 2014-05-30
zbwroom 2014-05-30
zbwroom 2014-05-29
鸟菜小端前 2018-09-12
zbwroom 2015-04-10
Oranq 2015-08-29
CrazyDogWang 2016-01-06
lizean 2016-04-30
小新正在敲代码 2016-04-14
CrazyDogWang 2016-11-30
lizean 2016-12-19
princejingyun 2016-12-14
youyouzouzou 2017-02-24
youyouzouzou 2017-05-30
Oranq 2017-05-30
Oranq 2017-09-09
lizean 2017-09-06