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 相关文章推荐
JavaScript 基础知识 被自己遗忘的
Oct 15 Javascript
数组Array进行原型prototype扩展后带来的for in遍历问题
Feb 07 Javascript
基于jquery的点击链接插入链接内容的代码
Jul 31 Javascript
jQuery针对各类元素操作基础教程
Aug 29 Javascript
使用JS中的exec()方法构造正则表达式验证
Aug 01 Javascript
最全面的百度地图JavaScript离线版开发
Sep 10 Javascript
JavaScript交换两个变量值的七种解决方案
Dec 01 Javascript
Angular组件化管理实现方法分析
Mar 17 Javascript
vue select二级联动第二级默认选中第一个option值的实例
Jan 10 Javascript
axios的拦截请求与响应方法
Aug 11 Javascript
JQuery通过后台获取数据遍历到前台的方法
Aug 13 jQuery
node读写Excel操作实例分析
Nov 06 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
PhpDocumentor 2安装以及生成API文档的方法
2014/05/21 PHP
在SAE上搭建最新wordpress的方法
2014/12/21 PHP
tp5框架使用cookie加密算法实现登录功能示例
2020/02/10 PHP
HTML node相关的一些资料整理
2010/01/01 Javascript
JS实现文字链接感应鼠标淡入淡出改变颜色的方法
2015/02/26 Javascript
jQuery插件实现控制网页元素动态居中显示
2015/03/24 Javascript
jQuery实现页面内锚点平滑跳转特效的方法总结
2015/05/11 Javascript
jquery插件unobtrusive实现片段式加载
2015/06/15 Javascript
jQuery往返城市和日期查询实例讲解
2015/10/09 Javascript
浅谈AngularJS中使用$resource(已更新)
2017/09/14 Javascript
详解bootstrap用dropdown-menu实现上下文菜单
2017/09/22 Javascript
vue 数组和对象不能直接赋值情况和解决方法(推荐)
2017/10/25 Javascript
bootstrap table表格插件之服务器端分页实例代码
2018/09/12 Javascript
适合前端Vue开发童鞋的跨平台Weex的使用详解
2019/10/16 Javascript
使用jquery实现轮播图效果
2021/01/02 jQuery
[51:53]完美世界DOTA2联赛循环赛 LBZS vs DM BO2第二场 11.01
2020/11/02 DOTA
python翻译软件实现代码(使用google api完成)
2013/11/26 Python
python实现的简单文本类游戏实例
2015/04/28 Python
Python3实现爬取指定百度贴吧页面并保存页面数据生成本地文档的方法
2018/04/22 Python
使用numba对Python运算加速的方法
2018/10/15 Python
Python如何处理大数据?3个技巧效率提升攻略(推荐)
2019/04/15 Python
Django项目主urls导入应用中views的红线问题解决
2019/08/10 Python
python使用sklearn实现决策树的方法示例
2019/09/12 Python
检测tensorflow是否使用gpu进行计算的方式
2020/02/03 Python
DataFrame.groupby()所见的各种用法详解
2020/06/14 Python
python 动态渲染 mysql 配置文件的示例
2020/11/20 Python
澳大利亚网上玩具商店:Mr Toys Toyworld
2018/03/25 全球购物
Annoushka英国官网:英国奢侈珠宝品牌
2018/10/20 全球购物
美国第二大连锁药店:Rite Aid
2019/04/03 全球购物
甜品店的创业计划书范文
2014/01/02 职场文书
住院医师规范化培训实施方案
2014/06/12 职场文书
司法局2014法制宣传日活动总结
2014/11/01 职场文书
2014年党总支工作总结
2014/12/18 职场文书
苏州园林导游词
2015/02/03 职场文书
优秀班干部主要事迹材料
2015/11/04 职场文书
Python 高级库15 个让新手爱不释手(推荐)
2021/05/15 Python