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 相关文章推荐
Grid得到选择行数据的方法总结
Jan 17 Javascript
JavaScript之HTMLCollection接口代码
Apr 27 Javascript
jquery点击缩略图切换视频播放特效代码分享
Sep 15 Javascript
BootStrap日期控件在模态框中选择时间下拉菜单无效的原因及解决办法(火狐下不能点击)
Aug 18 Javascript
jQuery与js实现颜色渐变的方法
Dec 30 Javascript
javascript实现下雨效果
Mar 27 Javascript
uploader秒传图片到服务器完整代码
Apr 22 Javascript
详解使用vue脚手架工具搭建vue-webpack项目
May 10 Javascript
React如何利用相对于根目录进行引用组件详解
Oct 09 Javascript
js实现下拉框二级联动
Dec 04 Javascript
微信小程序的授权实现过程解析
Aug 02 Javascript
微信小程序跳转到其他网页(外部链接)的实现方法
Sep 20 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
WIN98下Apache1.3.14+PHP4.0.4的安装
2006/10/09 PHP
php学习笔记 面向对象中[接口]与[多态性]的应用
2011/06/16 PHP
Linux中用PHP判断程序运行状态的2个方法
2014/05/04 PHP
py文件转exe时包含paramiko模块出错解决方法
2016/08/12 PHP
PHP实现批量检测网站是否能够正常打开的方法
2016/08/23 PHP
一个用js实现控制台控件的代码
2007/09/04 Javascript
JQquery的一些使用心得分享
2012/08/01 Javascript
怎么清空javascript数组
2013/05/11 Javascript
使用jquery animate创建平滑滚动效果(可以是到顶部、到底部或指定地方)
2014/05/27 Javascript
Node.js开发之访问Redis数据库教程
2015/01/14 Javascript
js实现的彩色方块飞舞奇幻效果
2016/01/27 Javascript
你所未知的3种Node.js代码优化方式
2016/02/25 Javascript
js绘制购物车抛物线动画
2020/11/18 Javascript
vue指令只能输入正数并且只能输入一个小数点的方法
2018/06/08 Javascript
Webpack的dll功能使用
2018/06/28 Javascript
浅析Proxy可以优化vue的数据监听机制问题及实现思路
2018/11/29 Javascript
详解如何在vscode里面调试js和node.js的方法步骤
2018/12/24 Javascript
JavaScript实现轮播图效果代码实例
2019/09/28 Javascript
p5.js绘制创意自画像
2019/11/04 Javascript
Vue 请求传公共参数的操作
2020/07/31 Javascript
微信小程序实现倒计时功能
2020/11/19 Javascript
Python爬虫框架Scrapy安装使用步骤
2014/04/01 Python
Python编程入门之Hello World的三种实现方式
2015/11/13 Python
python psutil库安装教程
2018/03/19 Python
django用户注册、登录、注销和用户扩展的示例
2018/03/19 Python
解决Python网页爬虫之中文乱码问题
2018/05/11 Python
python字符串和常用数据结构知识总结
2019/05/21 Python
python 自动轨迹绘制的实例代码
2019/07/05 Python
django model的update时auto_now不被更新的原因及解决方式
2020/04/01 Python
详解python爬取弹幕与数据分析
2020/11/14 Python
菲律宾酒店预订网站:Hotels.com菲律宾
2017/07/12 全球购物
英国和爱尔兰的自炊式豪华度假小屋:Rural Retreats
2018/06/08 全球购物
财务助理岗位职责
2013/11/10 职场文书
学校就业推荐信范文
2014/05/19 职场文书
交通肇事罪辩护词
2015/05/21 职场文书
交通安全学习心得体会
2016/01/18 职场文书