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 相关文章推荐
popdiv
Jul 14 Javascript
[HTML/CSS/Javascript]WWTJS
Sep 25 Javascript
js 发个判断字符串是否为符合标准的函数
Apr 27 Javascript
Javascript学习笔记二 之 变量
Dec 15 Javascript
使用script的src实现跨域和类似ajax效果
Nov 10 Javascript
JavaScript获取网页、浏览器、屏幕高度和宽度汇总
Dec 18 Javascript
AngularJS基础知识笔记之表格
May 10 Javascript
js实现的简单radio背景颜色选择器代码
Aug 18 Javascript
AngularJS数据源的多种获取方式汇总
Feb 02 Javascript
@ResponseBody 和 @RequestBody 注解的区别
Mar 08 Javascript
详解JavaScript调用栈、尾递归和手动优化
Jun 03 Javascript
微信小程序遍历Echarts图表实现多个饼图
Apr 25 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实现小写金额转换大写金额的代码(精确到分)
2012/01/10 PHP
支持汉转拼和拼音分词的PHP中文工具类ChineseUtil
2018/02/23 PHP
Yii2.0 RESTful API 基础配置教程详解
2018/12/26 PHP
打开超链需要“确认”对话框的方法
2007/03/08 Javascript
Ajax+Json 级联菜单实现代码
2009/10/27 Javascript
jQuery侧边栏随窗口滚动实现方法
2013/03/04 Javascript
JS去除字符串两端空格的简单实例
2013/12/27 Javascript
JQuery实现简单的服务器轮询效果实例
2016/03/31 Javascript
js点击返回跳转到指定页面实现过程
2020/08/20 Javascript
Javascript 获取鼠标当前的位置实现方法
2016/10/27 Javascript
JS如何实现在页面上快速定位(锚点跳转问题)
2017/08/14 Javascript
js中console在一行内打印字符串和对象的方法
2019/09/10 Javascript
[01:19:35]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#2Fnatic VS OG第二局
2016/03/05 DOTA
[56:41]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 Newbee vs OG
2018/04/01 DOTA
python数据结构树和二叉树简介
2014/04/29 Python
Python实现统计英文单词个数及字符串分割代码
2015/05/28 Python
Python实现多并发访问网站功能示例
2017/06/19 Python
python广度优先搜索得到两点间最短路径
2019/01/17 Python
Pycharm简单使用教程(入门小结)
2019/07/04 Python
python实现知乎高颜值图片爬取
2019/08/12 Python
pytorch 修改预训练model实例
2020/01/18 Python
Stuart Weitzman美国官网:美国奢华鞋履品牌
2016/08/18 全球购物
瑞典度假品牌:OAS
2019/05/28 全球购物
Clarks鞋澳大利亚官方网站:Clarks Australia
2019/12/25 全球购物
专科毕业生就业推荐信
2013/11/01 职场文书
志愿者服务感言
2014/02/27 职场文书
贯彻学习两会心得体会范文
2014/03/17 职场文书
文科毕业生自荐书范文
2014/04/17 职场文书
励志演讲稿范文
2014/04/29 职场文书
团代会宣传工作方案
2014/05/08 职场文书
小学优秀辅导员事迹材料
2014/05/11 职场文书
群众路线四风问题整改措施
2014/09/27 职场文书
上课说话检讨书
2015/01/27 职场文书
龙潭大峡谷导游词
2015/02/10 职场文书
廉洁自律证明
2015/06/24 职场文书
青年志愿者活动感想
2015/08/07 职场文书