AngularJS监听ng-repeat渲染完成的方法


Posted in Javascript onMarch 20, 2018

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

AngularJS监听ng-repeat渲染完成的方法

实际上它是通过Angular的ng-repeat形成的,html中的代码是:

<li ng-repeat="for list in lists()" id="{{ list.id }}">{{ list.name }}</li>

图中下方的新建清单button,点击之后就往lists数组中push了一个新的list对象,此时页面会自动渲染,也对应增加一个<li>,如下:

AngularJS监听ng-repeat渲染完成的方法

注意MyList1一直是active状态的(class="active"),我的需求是新增list后,把新增的list设置为active,即在新增后就变成下面这种样式:

AngularJS监听ng-repeat渲染完成的方法

刚开始我尝试在button对应的函数中,往lists数组中push了新的list对象后,使用document.getElementById获取到新增的<li>对象,然后为其添加一个class="active",结果发现获取到的DOM对象为null,经过搜索发现原因是:往lists数组push对象后,数组发生改变,所有的<li>都会重新渲染,在push完成之后马上去找新增的DOM对象,DOM还没渲染好,因此是获取不到的。解法是:使用AngularJS的指令去监听ng-repeat是否渲染完成,在渲染完成后,再去取新增的<li>对象,这个网上有很多相关的内容了,代码如下:

myapp.directive('repeatFinish', function ($timeout) {
  return {
    restrict: "C",
    link: function (scope, element, attr) {
      if(scope.$last === true){
        $timeout(function () {
          scope.change_list(element[0]);
        }, 10);
      }
    }
  }
});

上述代码建立了一个名为repeatFinish的指令,restrict: "C"表示指令放在DOMclass中(驼峰形式,即class="repeat-finish"),scope.$last === true表示已经渲染到了最后一个对象,此时执行change_list函数(定义在控制器中,功能是把当前active的对象取消active,然后设置传入的DOM对象为active),element[0]可以直接取到当前渲染的DOM元素。注意我使用了$timeout10ms后执行change_list,我发现直接使用change_list还是会找不到DOM,原因不明,期待大神解答。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
将HTML自动转为JS代码
Jun 26 Javascript
用Javascript 和 CSS 实现脚注(Footnote)效果
Sep 09 Javascript
用js脚本控制asp.net下treeview的NodeCheck的实现代码
Mar 02 Javascript
javascript动画浅析
Aug 30 Javascript
jquery 实现返回顶部功能
Nov 17 Javascript
js+html5实现canvas绘制简单矩形的方法
Jun 05 Javascript
JavaScript如何获取数组最大值和最小值
Nov 18 Javascript
浅谈Javascript中的12种DOM节点类型
Aug 19 Javascript
使用JS 插件qrcode.js生成二维码功能
Feb 20 Javascript
JS中去掉array中重复元素的方法
May 26 Javascript
vue resource post请求时遇到的坑
Oct 19 Javascript
JS开发 富文本编辑器TinyMCE详解
Jul 19 Javascript
vue对storejs获取的数据进行处理时遇到的几种问题小结
Mar 20 #Javascript
webpack本地开发环境无法用IP访问的解决方法
Mar 20 #Javascript
解决vue-router中的query动态传参问题
Mar 20 #Javascript
vue数据传递--我有特殊的实现技巧
Mar 20 #Javascript
手写Node静态资源服务器的实现方法
Mar 20 #Javascript
JS 实现缓存算法的示例(FIFO/LRU)
Mar 20 #Javascript
react-native封装插件swiper的使用方法
Mar 20 #Javascript
You might like
flexigrid 类似ext grid的JS表格代码
2010/07/17 Javascript
编写Js代码要注意的几条规则
2010/09/10 Javascript
给文字加上着重号的JS代码
2013/11/12 Javascript
jQuery产品间断向下滚动效果核心代码
2014/05/08 Javascript
jquery实现textarea 高度自适应
2015/03/11 Javascript
原生js实现的贪吃蛇网页版游戏完整实例
2015/05/18 Javascript
vue-quill-editor实现图片上传功能
2017/08/08 Javascript
JS验证码实现代码
2017/09/14 Javascript
Vue 中axios配置实例详解
2018/07/27 Javascript
angular4 获取wifi列表中文显示乱码问题的解决
2018/10/20 Javascript
bootstrap与pagehelper实现分页效果
2018/12/29 Javascript
Vue中的情侣属性$dispatch和$broadcast详解
2019/03/07 Javascript
JS中的继承操作实例总结
2020/06/06 Javascript
JavaScript实现点击出现子菜单效果
2021/02/08 Javascript
[00:58]他们到底在电话里听到了什么?
2017/11/21 DOTA
用Python脚本来删除指定容量以上的文件的教程
2015/05/04 Python
使用Python的Flask框架表单插件Flask-WTF实现Web登录验证
2016/07/12 Python
Python实现将罗马数字转换成普通阿拉伯数字的方法
2017/04/19 Python
Django 登陆验证码和中间件的实现
2018/08/17 Python
pyqt5实现按钮添加背景图片以及背景图片的切换方法
2019/06/13 Python
Marks & Spencer爱尔兰:英国马莎百货
2016/04/20 全球购物
荷兰时尚精品店:Labels Fashion
2020/03/22 全球购物
软件配置管理有什么好处
2015/04/15 面试题
化工专业大学生职业生涯规划书
2014/01/14 职场文书
普通员工辞职信
2014/01/17 职场文书
工程采购员岗位职责
2014/03/09 职场文书
教导主任竞聘演讲稿
2014/05/16 职场文书
咖啡厅商业计划书
2014/09/15 职场文书
实习协议书范本
2014/09/25 职场文书
2014光棍节单身联谊活动策划书
2014/10/10 职场文书
开票员岗位职责
2015/02/12 职场文书
产品质量保证书范本
2015/02/27 职场文书
城管年度个人总结
2015/02/28 职场文书
新郎新娘致辞
2015/07/31 职场文书
中国现代文学之经典散文三篇
2019/09/18 职场文书
Pytorch 如何实现LSTM时间序列预测
2021/05/17 Python