宝哥软件园

角度监控重复渲染完成的方法

编辑:宝哥软件园 来源:互联网 时间:2021-09-01

对于项目,我的网页中有一个列表ul元素,样式如下:

其实是Angular ng-repeat构成的,html中的代码是:

Li ng-repeat=' for list in list()' id=' { { list。id}}' {{list。name } }/Li在图的底部创建一个新的列表按钮,然后将新的列表对象推入list数组。此时,页面将自动呈现,并相应地添加一个Li,如下所示:

请注意MyList1始终处于活动状态(class='active ')。我的要求是新增列表后设置为活动,即新增后会变成如下样式:

一开始我尝试在button对应的函数中将一个新的list对象推送到list数组中,然后用document.getElementById得到一个新的li对象,再给它添加一个class='active ',发现得到的DOM对象为null。经过搜索,我发现原因是:当数组改变时,所有的li都会被重新渲染。推送完成后,立即找到新添加的DOM对象。DOM没有渲染好,所以无法获得。解决方法是:使用AngularJS的指令监控ng-repeat是否渲染,然后在渲染后取出新添加的li对象。这个网络上有很多相关的内容,代码如下:

myapp.directive('repeatFinish ',function($ time out){ return { restrict : ' C ',link: function (scope,element,attr) { if(scope。$ last===true){ $ time out(function(){ scope . change _ list(element[0]);}, 10);} } }});上面的代码建立了一个名为repeatFinish的指令,restrict: 'C '表示该指令被放在DOM类(驼峰形式,即class='repeat-finish ')和作用域中。$ last==true表示已经呈现了最后一个对象。此时,执行change_list函数(在控制器中定义,函数是去激活当前活动的对象,然后将传入的DOM对象设置为活动的),元素[0]可以直接得到当前渲染的DOM元素。请注意,我使用了$timeout,并在10ms后执行了change_list。发现直接用change_list还是找不到DOM。原因不明。我期待大神的回答。

以上就是本文的全部内容。希望对大家的学习有帮助,支持我们。

更多资讯
游戏推荐
更多+