详解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 相关文章推荐
js控制分页打印、打印分页示例
Feb 08 Javascript
jQuery异步验证用户名是否存在示例代码
May 21 Javascript
JS实现很酷的EMAIL地址添加功能实例
Feb 28 Javascript
jQuery插件制作之全局函数用法实例
Jun 01 Javascript
JavaScript中setFullYear()方法的使用详解
Jun 11 Javascript
JS+CSS实现精美的二级导航效果代码
Sep 17 Javascript
快速学习JavaScript的6个思维技巧
Oct 13 Javascript
BootStrapValidator校验方式
Dec 19 Javascript
H5基于iScroll实现下拉刷新和上拉加载更多
Jul 18 Javascript
VSCode 配置React Native开发环境的方法
Dec 27 Javascript
使用JS来动态操作css的几种方法
Dec 18 Javascript
vue开发移动端底部导航条功能
Apr 08 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
第八节 访问方式 [8]
2006/10/09 PHP
php中对xml读取的相关函数的介绍一
2008/06/05 PHP
php字符串函数学习之strstr()
2015/03/27 PHP
PHP动态生成指定大小随机图片的方法
2016/03/25 PHP
PHP编程快速实现数组去重的方法详解
2017/07/22 PHP
Laravel自定义 封装便捷返回Json数据格式的引用方法
2019/09/29 PHP
用jquery写的菜单从左往右滑动出现
2014/04/11 Javascript
jquery easyui 结合jsp简单展现table数据示例
2014/04/18 Javascript
jquery中map函数与each函数的区别实例介绍
2014/06/23 Javascript
JavaScript用JQuery呼叫Server端方法示例代码
2014/09/03 Javascript
JQuery插件Quicksand实现超炫的动画洗牌效果
2015/05/03 Javascript
node.js操作mysql(增删改查)
2015/07/24 Javascript
JavaScript中数组去除重复的三种方法
2016/04/22 Javascript
jQuery文件上传控件 Uploadify 详解
2016/06/20 Javascript
Javascript中字符串replace方法的第二个参数探究
2016/12/05 Javascript
javascript填充默认头像方法
2018/02/22 Javascript
基于vue v-for 多层循环嵌套获取行数的方法
2018/09/26 Javascript
Angular8基础应用之表单及其验证
2019/08/11 Javascript
浅谈bootstrap layer.open中end的使用方法
2019/09/12 Javascript
[56:01]2018DOTA2亚洲邀请赛 3.31 小组赛 B组 Effect vs EG
2018/03/31 DOTA
[01:10:49]Secret vs VGJ.S 2018国际邀请赛淘汰赛BO3 第二场 8.24
2018/08/25 DOTA
Python实用日期时间处理方法汇总
2015/05/09 Python
利用ctypes提高Python的执行速度
2016/09/09 Python
Python(Django)项目与Apache的管理交互的方法
2018/05/16 Python
Python 剪绳子的多种思路实现(动态规划和贪心)
2020/02/24 Python
numpy库reshape用法详解
2020/04/19 Python
keras 简单 lstm实例(基于one-hot编码)
2020/07/02 Python
python 如何读、写、解析CSV文件
2021/03/03 Python
处理textarea中的换行和空格
2019/12/12 HTML / CSS
台湾百利市购物中心:e-Payless
2017/08/16 全球购物
澳大利亚设计的优质鞋类和适合澳大利亚生活方式的服装:Rivers
2019/04/23 全球购物
致1500米运动员广播稿
2014/02/07 职场文书
社区娱乐活动方案
2014/08/21 职场文书
银行实习推荐信
2015/03/27 职场文书
昆虫记读书笔记
2015/06/26 职场文书
五星级酒店宣传口号
2015/12/25 职场文书