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 相关文章推荐
Ruffy javascript 学习笔记
Nov 30 Javascript
URL地址中的#符号使用说明
Feb 12 Javascript
JavaScript继承基础讲解(原型链、借用构造函数、混合模式、原型式继承、寄生式继承、寄生组合式继承)
Aug 16 Javascript
jquery append 动态添加的元素事件on 不起作用的解决方案
Jul 30 Javascript
非常实用的js验证框架实现源码 附原理方法
Jun 08 Javascript
AngularJs bootstrap详解及示例代码
Sep 01 Javascript
jQuery使用方法
Feb 04 Javascript
详解AngularJs HTTP响应拦截器实现登陆、权限校验
Apr 11 Javascript
Node.js静态服务器的实现方法
Feb 28 Javascript
js实现登录时记住密码的方法分析
Apr 05 Javascript
JavaScript 函数用法详解【函数定义、参数、绑定、作用域、闭包等】
May 12 Javascript
jQuery实现影院选座订座效果
Apr 13 jQuery
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
《神奇女侠:血脉》神力女超人大战犯罪公司
2020/04/09 欧美动漫
PHP 编程请选择正确的文本编辑软件
2006/12/21 PHP
PHP、Nginx、Apache中禁止网页被iframe引用的方法
2020/10/01 PHP
php错误日志简单配置方法
2016/07/11 PHP
比较完整的微信开发php代码
2016/08/02 PHP
Thinkphp通过一个入口文件如何区分移动端和PC端
2017/04/18 PHP
IE iframe的onload方法分析小结
2010/01/07 Javascript
基于jquery实现漂亮的动态信息提示效果
2011/08/02 Javascript
javascript 图片裁剪技巧解读
2012/11/15 Javascript
在页面加载完成后通过jquery给多个span赋值
2014/05/21 Javascript
js防止页面被iframe调用的方法
2014/10/30 Javascript
倾力总结40条常见的移动端Web页面问题解决方案
2016/05/24 Javascript
JavaScript之WebSocket技术详解
2016/11/18 Javascript
JS简单封装的图片无缝滚动效果示例【测试可用】
2017/03/22 Javascript
详解webpack loader和plugin编写
2018/10/12 Javascript
javascript实现函数柯里化与反柯里化过程解析
2019/10/08 Javascript
JS数组方法shift()、unshift()用法实例分析
2020/01/18 Javascript
JavaScript闭包原理与用法学习笔记
2020/05/29 Javascript
利用Python实现Windows定时关机功能
2017/03/21 Python
浅谈python日志的配置文件路径问题
2018/04/28 Python
python 列表递归求和、计数、求最大元素的实例
2018/11/28 Python
对python条件表达式的四种实现方法小结
2019/01/30 Python
Python读取表格类型文件代码实例
2020/02/17 Python
中国海淘族值得信赖的海淘返利网站:55海淘
2017/01/16 全球购物
来自全球大都市的高级街头服饰:Pegador
2018/01/03 全球购物
KARATOV珠宝在线商店:俄罗斯珠宝品牌
2019/03/13 全球购物
NYX Professional Makeup官方网站:专业彩妆和美容产品
2019/10/29 全球购物
六一儿童节主持词
2014/03/21 职场文书
寒假家长评语大全
2014/04/16 职场文书
空气环保标语
2014/06/12 职场文书
垃圾桶标语
2014/06/24 职场文书
工作表扬信
2015/01/17 职场文书
应届毕业生自荐信
2015/03/04 职场文书
在CSS中映射鼠标位置并实现通过鼠标移动控制页面元素效果(实例代码)
2021/04/22 HTML / CSS
解析在浏览器地址栏输入一个URL后发生了什么
2021/06/21 Servers
SQL Server Agent 服务无法启动
2022/04/20 SQL Server