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 相关文章推荐
jquery 判断滚动条到达了底部和顶端的方法
Apr 02 Javascript
JavaScript数组深拷贝和浅拷贝的两种方法
Apr 16 Javascript
javascript实现鼠标拖动改变层大小的方法
Apr 30 Javascript
Javascript中的迭代、归并方法详解
Jun 14 Javascript
JS 数字转换为大写金额的简单实例
Aug 04 Javascript
jQuery简单自定义图片轮播插件及用法示例
Nov 21 Javascript
Bootstrap源码解读标签、徽章、缩略图和警示框(8)
Dec 26 Javascript
利用Vue.js+Node.js+MongoDB实现一个博客系统(附源码)
Apr 24 Javascript
element ui里dialog关闭后清除验证条件方法
Feb 26 Javascript
微信内置开发 iOS修改键盘换行为搜索的解决方案
Nov 06 Javascript
js实现时间日期校验
May 26 Javascript
node.js 如何监视文件变化
Sep 01 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
PHP 中文乱码解决办法总结分析
2009/07/30 PHP
php去除头尾空格的2种方法
2015/03/16 PHP
php cookie工作原理与实例详解
2016/07/18 PHP
php实现姓名根据首字母排序的类与方法(实例代码)
2018/05/16 PHP
php常用日期时间函数实例小结
2019/07/04 PHP
Laravel 创建可以传递参数 Console服务的例子
2019/10/14 PHP
同时使用n个window onload加载实例介绍
2013/04/25 Javascript
js 单击式的下拉菜单效果实例
2013/08/13 Javascript
jQuery 删除/替换DOM元素的几种方式
2014/05/20 Javascript
jQuery实现简单网页遮罩层/弹出层效果兼容IE6、IE7
2014/06/16 Javascript
angularjs学习笔记之完整的项目结构
2015/09/26 Javascript
js实现新浪微博首页效果
2015/10/16 Javascript
总结AngularJS开发者最常犯的十个错误
2016/08/31 Javascript
深入学习js瀑布流布局
2016/10/14 Javascript
JS克隆,属性,数组,对象,函数实例分析
2016/11/26 Javascript
javascript中对象的定义、使用以及对象和原型链操作小结
2016/12/14 Javascript
JS前端笔试题分析
2016/12/19 Javascript
nodejs实现连接mongodb数据库的方法示例
2018/03/15 NodeJs
vue移动端下拉刷新和上滑加载
2020/10/27 Javascript
微信小程序实现多行文字滚动
2020/11/18 Javascript
[40:05]DOTA2上海特级锦标赛A组小组赛#1 EHOME VS MVP.Phx第一局
2016/02/25 DOTA
Python实现的数据结构与算法之基本搜索详解
2015/04/22 Python
Python爬虫实现验证码登录代码实例
2019/05/10 Python
python中的逆序遍历实例
2019/12/25 Python
python2 对excel表格操作完整示例
2020/02/23 Python
Python调用飞书发送消息的示例
2020/11/10 Python
CK美国官网:Calvin Klein
2016/08/26 全球购物
Ralph Lauren英国官方网站:Ralph Lauren UK
2018/04/03 全球购物
澳大利亚领先的女性运动服品牌:Lorna Jane
2020/06/19 全球购物
税务专业毕业生自荐信
2013/11/10 职场文书
高中毕业生个人自我鉴定
2013/11/24 职场文书
电钳工人个人求职信
2014/05/10 职场文书
法学专业毕业实习自我鉴定2014
2014/09/27 职场文书
技术员岗位职责
2015/02/04 职场文书
《扇形统计图》教学反思
2016/02/17 职场文书
CSS实现漂亮的时钟动画效果的实例代码
2021/03/30 HTML / CSS