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 相关文章推荐
使用prototype.js进行异步操作
Feb 07 Javascript
jquery处理json数据实例分析
Jun 03 Javascript
让checkbox不选中即将选中的checkbox不选中
Jul 11 Javascript
$.each遍历对象、数组的属性值并进行处理
Jul 18 Javascript
浅谈js中几种实用的跨域方法原理详解
Dec 02 Javascript
原生js更改css样式的两种方式
Mar 15 Javascript
基于JS实现仿京东搜索栏随滑动透明度渐变效果
Jul 10 Javascript
AngularJS使用$http配置对象方式与服务端交互方法
Aug 13 Javascript
Bootstrap 实现表格样式、表单布局的实例代码
Dec 09 Javascript
vue cli3.0结合echarts3.0与地图的使用方法示例
Mar 26 Javascript
详解如何搭建mpvue框架搭配vant组件库的小程序项目
May 16 Javascript
d3.js 地铁轨道交通项目实战
Nov 27 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函数import_request_variables()用法分析
2016/04/02 PHP
Yii视图CGridView实现操作按钮定义地址示例
2016/07/14 PHP
javascript中的float运算精度实例分析
2010/08/21 Javascript
模仿百度三维地图的js数据分享
2011/05/12 Javascript
jQuery 翻牌或百叶窗效果(内容三秒自动切换)
2012/06/14 Javascript
ECHO.js 纯javascript轻量级延迟加载的实例代码
2016/05/24 Javascript
js判断文件格式及大小的简单实例(必看)
2016/10/11 Javascript
angular2 ng build部署后base文件路径问题详细解答
2017/07/15 Javascript
实现div内部滚动条滚动到底部和顶部的代码
2017/11/15 Javascript
JS实现非首屏图片延迟加载的示例
2018/01/06 Javascript
JS实现图片上传多次上传同一张不生效的处理方法
2018/08/06 Javascript
javascript匿名函数中的'return function()'作用
2018/10/15 Javascript
vue 翻页组件vue-flip-page效果
2020/02/05 Javascript
如何构建一个Vue插件并生成npm包
2020/10/26 Javascript
Python中的魔法方法深入理解
2014/07/09 Python
在Python中操作日期和时间之gmtime()方法的使用
2015/05/22 Python
Python fileinput模块使用实例
2015/06/03 Python
python 中的int()函数怎么用
2017/10/17 Python
django框架之cookie/session的使用示例(小结)
2018/10/15 Python
Scrapy-Redis结合POST请求获取数据的方法示例
2019/05/07 Python
Python依赖包整体迁移方法详解
2019/08/15 Python
解决keras backend 越跑越慢问题
2020/06/18 Python
matplotlib更改窗口图标的方法示例
2021/02/03 Python
CSS3中使用RGBa来调节透明度的教程
2016/05/09 HTML / CSS
L’AGENCE官网:加州女装品牌
2018/06/03 全球购物
迪奥美国官网:Dior美国
2019/12/07 全球购物
DTD的含义以及作用
2014/01/26 面试题
应届毕业生求职自荐书
2014/01/03 职场文书
《乡愁》教学反思
2014/02/18 职场文书
怎样拟定创业计划书
2014/05/01 职场文书
大学班长竞选稿
2015/11/20 职场文书
关于实现中国梦的心得体会
2016/01/05 职场文书
golang goroutine顺序输出方式
2021/04/29 Golang
国庆节到了,利用JS实现一个生成国庆风头像的小工具 详解实现过程
2021/10/05 Javascript
Python装饰器详细介绍
2022/03/25 Python
mysql查看表结构的三种方法总结
2022/07/07 MySQL