详解angular中如何监控dom渲染完毕


Posted in Javascript onJanuary 03, 2017

刚刚看到群上一个人说,他们公司凡是用angular和jquery插件一起用的人,都被解雇了,没看到这句话之前我很惭愧的说我有这样用过,其实angular的生态系统那么完善,完全可以不用去操作任何的dom元素都可以满足你的提倡开发需求。

那么如果真的需要用某个jquery插件,自己懒得封装angular插件或者懒得去找angular插件的时候,我们该怎么判断dom加载完毕。

有人说使用ng-init=""

亲测:表示没达到我想要的结果....

当然你如果使用window.onload=function(){}的话,不知道行不行,你可以去试试...

我们先了解一下angular的背景:

AngularJs是Google开源的前端JS框架。使用AngularJs, 我们能够容易地、健壮的开发出类似于Gmail一样的单页Web应用。AngularJs这个新兴的MVC前端框架,具有以下特点: MVC, 模块化,自动化双向数据绑定,语义化标签、依赖注入等。

angular和jquery有什么不同呢?

Jquery的主要目的是简化Js编写,专注于浏览器跨平台,主要用来操作DOM.

AngularJs主要关注Html数据的获取和呈现,以及应对日益复杂的Web应用需求,使得开发庞大的Web应用能够更加容易。

事实上,AnguarJs提供了一些对于Html进行加强的语义标签(directive),这些标签在浏览器加载完页面后被执行。举例来说:

<table id=”leaderBoard”>
     <thead>
       <tr>
         <th>Id</th>
         <th>Name</th>
         <th>Salary</th>
       </tr>
     </thead>
     <tbody>
       <tr ng-repeat="user in users">
         <td>{{user.Id}}</td>
         <td>{{user.Name}}</td>
         <td>{{user.Salary}}</td>
       </tr>
     </tbody>
</table>

上面的ng-repeat,就是一个directive, 相当于一个for循环。在页面加载完成后,AngularJs会遍历users数据对象,来呈现(render)出这个table中的内容。

如何实现在render完成之后,执行Js脚本

当我们使用Jquery结合AngulraJs使用的时候,希望在render完table后,执行一段js脚本,把JqTable应用到该table上。在实际开发中,会经常碰到这样的需求,希望能够捕获到AngularJs渲染完成页面的事件。

要达到这个目的,我们需要为当前的app自定义directive:

app.directive('onFinishRenderFilters', function ($timeout) {
  return {
    restrict: 'A',
    link: function(scope, element, attr) {
      if (scope.$last === true) {
        $timeout(function() {
          scope.$emit('ngRepeatFinished');
        });
      }
    }
  };
});

然后,在我们需要监控的地方,加上该directive:

<tr ng-repeat="user in users" on-finish-render-filters>
   <td>{{user.Id}}</td>
   <td>{{user.Name}}</td>
   <td>{{user.Salary}}</td>
</tr>

最后,补充上我们需要render完成之后的Js脚本:

$scope.$on('ngRepeatFinished', function (ngRepeatFinishedEvent) {
     //下面是在table render完成后执行的js
     var table = $("#leaderBoard").dataTable({
       bJQueryUI: true,
       "sScrollX": '100%',
     });
});

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
PJ Blog修改-禁止复制的代码和方法
Oct 25 Javascript
jquery创建一个ajax关键词数据搜索实现思路
Feb 26 Javascript
javascript中对Date类型的常用操作小结
May 19 Javascript
微信小程序 wx.request(OBJECT)发起请求详解
Oct 13 Javascript
JavaScript实现简单评论功能
Aug 17 Javascript
详解封装基础的angular4的request请求方法
Jun 05 Javascript
Vuejs 实现简易 todoList 功能 与 组件实例代码
Sep 10 Javascript
Vue引用Swiper4插件无法重写分页器样式的解决方法
Sep 27 Javascript
vscode vue 文件模板的配置方法
Jul 23 Javascript
Angular 多级路由实现登录页面跳转(小白教程)
Nov 19 Javascript
原生js实现无缝轮播图
Jan 11 Javascript
js实现搜索提示框效果
Sep 05 Javascript
Node.js学习入门
Jan 03 #Javascript
通过AngularJS实现图片上传及缩略图展示示例
Jan 03 #Javascript
DWR3 访问WEB元素的两种方法实例详解
Jan 03 #Javascript
BootStrap学习系列之布局组件(下拉,按钮组[toolbar],上拉)
Jan 03 #Javascript
javaScript生成支持中文带logo的二维码(jquery.qrcode.js)
Jan 03 #Javascript
非常优秀的JS图片轮播插件Swiper的用法
Jan 03 #Javascript
JavaScript对象封装的简单实现方法(3种方法)
Jan 03 #Javascript
You might like
php单件模式结合命令链模式使用说明
2008/09/07 PHP
PHP实现通过中文字符比率来判断垃圾评论的方法
2014/10/20 PHP
php中判断数组相等的方法以及数组运算符介绍
2015/03/30 PHP
PHP 中魔术常量的实例详解
2017/10/26 PHP
一个关于javascript匿名函数的问题分析
2012/03/30 Javascript
jQuery中 attr() 方法使用小结
2015/05/03 Javascript
asp.net中oracle 存储过程(图文)
2015/08/12 Javascript
学习 NodeJS 第八天:Socket 通讯实例
2016/12/21 NodeJs
原生JS实现简单放大镜效果
2017/02/08 Javascript
Bootstrap fileinput文件上传预览插件使用详解
2017/05/16 Javascript
jQuery Easyui Treegrid实现显示checkbox功能
2017/08/08 jQuery
layui弹出层按钮提交iframe表单的方法
2018/08/20 Javascript
ES6的Fetch异步请求的实现方法
2018/12/07 Javascript
详解Vue源码之数据的代理访问
2018/12/11 Javascript
Vue axios 将传递的json数据转为form data的例子
2019/10/29 Javascript
快速解决Vue、element-ui的resetFields()方法重置表单无效的问题
2020/08/12 Javascript
Vue+element-ui添加自定义右键菜单的方法示例
2020/12/08 Vue.js
[01:27:30]LGD vs Newbee 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/19 DOTA
Python压缩和解压缩zip文件
2015/02/14 Python
在Python中操作列表之list.extend()方法的使用
2015/05/20 Python
Python 中 Virtualenv 和 pip 的简单用法详解
2017/08/18 Python
Python之Scrapy爬虫框架安装及使用详解
2017/11/16 Python
使用Python的Dataframe取两列时间值相差一年的所有行方法
2018/07/10 Python
Python 中 function(#) (X)格式 和 (#)在Python3.*中的注意事项
2018/11/30 Python
使用Django搭建一个基金模拟交易系统教程
2019/11/18 Python
Spring Boot中使用IntelliJ IDEA插件EasyCode一键生成代码详细方法
2020/03/20 Python
Python脚本实现监听服务器的思路代码详解
2020/05/28 Python
如何表示python中的相对路径
2020/07/08 Python
澳大利亚票务和娱乐市场领导者:Ticketmaster
2017/03/03 全球购物
PHP如何去执行一个SQL语句
2016/03/05 面试题
上海奥佳笔试题面试题
2016/11/16 面试题
学校运动会广播稿
2014/10/11 职场文书
《抽屉原理》教学反思
2016/02/20 职场文书
送给教师们,到底该如何写好教学反思?
2019/07/02 职场文书
超级实用!五步法则,教你写好年终工作总结
2019/12/05 职场文书
基于docker安装zabbix的详细教程
2022/06/05 Servers