AngularJS使用ng-Cloak阻止初始化闪烁问题的方法


Posted in Javascript onNovember 03, 2016

本文实例讲述了AngularJS使用ng-Cloak阻止初始化闪烁问题的方法。分享给大家供大家参考,具体如下:

在做angular的SPA开发时,我们经常会遇见在如Chrome这类能够快速解析的浏览器上出现表达式({% raw %} {{ express }} {% endraw %} ),或者是模块(div)的闪烁。对于这个问题由于JavaScript去操作DOM,都会等待DOM加载完成(DOM ready)。对于angular会在DOM ready完会才回去解析html view Template,所以对于Chrome这类快速的浏览器你会看见有闪烁的情况出现。而对于IE7,8这类解析稍慢的浏览器大部分情况下是不会出现这个问题的。

angular中为我们提供了ng-cloak来实现防止闪烁的方案,我们只需要在需要的地方加上ng-cloak。同时对于bing文字({% raw %}{{ express }} {% endraw %})我们也可以改为ng-bind来实现避免。

<div id="template1" ng-cloak>{{ 'hello' }}</div>
<div id="template2" ng-cloak class="ng-cloak">{% raw %} {{ 'hello IE7' }} {% endraw %} </div>
<div id="template2" ng-bing="'hello IE7'"></div>

angular将ng-cloak实现为一个directive,并会在初始化的时候在DOM的heade增加一行css代码,如下:

@charset "UTF-8";[ng\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide{display:none !important;}ng\:form{display:block;}.ng-animate-start{clip:rect(0,auto,auto,0);-ms-zoom:1.0001;}.ng-animate-active{clip:rect(-1px,auto,auto,0);-ms-zoom:1;}

从上面我们可以看见angular将带有ng-clock的的元素设置为display:none,隐藏掉,在等到angular解析到带有ng-clock的节点时候,会把attribute和class同时remove掉,这样就可以实现防止节点的闪烁。

var ngCloakDirective = ngDirective({
   compile: function(element, attr) {
    attr.$set('ngCloak', undefined);
    element.removeClass('ng-cloak');
   }
});

在angular-bootstrap.js中会看见这样的代码去增加前面所说的css:

document.write('<link rel="stylesheet" type="text/css" href="' + serverPath + '../css/angular.css"/>');

好像闪烁的问题好像已经能够被我解决了,恩是否是这样的,理论也改如此,但是现实是残酷的,我们的感性认识经常会被现实一记重重的耳光,我们才能很更深入全面的思考,如果浏览器的速度比angular在head中加入css的速度还快呢?我在给公司的一个项目组解决这个闪烁的问题的时候就遇见了这个问题。怎么办呢?那我们只能使出我们必杀技,自己把css加入我们的css文件引入heade,启动加载,ok这样就可以完美解决了。(如果你也遇见了加了ng-cloak还不起作用的话,那么试试直接引入css文件吧)

到这里关于ng-cloak的原理和解决方案已经完成。

希望本文所述对大家AngularJS程序设计有所帮助。

Javascript 相关文章推荐
一个cssQuery对象 javascript脚本实现代码
Jul 21 Javascript
web基于浏览器的本地存储方法应用
Nov 27 Javascript
一些常用弹出窗口/拖放/异步文件上传等实用代码
Jan 06 Javascript
让新消息在网页标题闪烁提示的jQuery代码
Nov 04 Javascript
谈一谈javascript中继承的多种方式
Feb 19 Javascript
详细谈谈javascript的对象
Jul 31 Javascript
详解vue2父组件传递props异步数据到子组件的问题
Jun 29 Javascript
Vue 兄弟组件通信的方法(不使用Vuex)
Oct 26 Javascript
如何优雅地取消 JavaScript 异步任务
Mar 22 Javascript
jQuery实现简单日历效果
Jul 05 jQuery
vscode中的vue项目报错Property ‘xxx‘ does not exist on type ‘CombinedVueInstance<{ readyOnly...Vetur(2339)
Sep 11 Javascript
详解Vite的新体验
Feb 22 Javascript
Vue.js实现无限加载与分页功能开发
Nov 03 #Javascript
vue自定义指令实现v-tap插件
Nov 03 #Javascript
angular ngClick阻止冒泡使用默认行为的方法
Nov 03 #Javascript
vue.js指令v-for使用及索引获取
Nov 03 #Javascript
vue.js初学入门教程(1)
Nov 03 #Javascript
把json格式的字符串转换成javascript对象或数组的方法总结
Nov 03 #Javascript
AngularJS出现$http异步后台无法获取请求参数问题的解决方法
Nov 03 #Javascript
You might like
Yii实现MySQL多数据库和读写分离实例分析
2014/12/03 PHP
LaravelS通过Swoole加速Laravel/Lumen详解
2018/03/02 PHP
js字符编码函数区别分析
2011/12/28 Javascript
精心挑选的15款优秀jQuery 本特效插件和教程
2012/08/06 Javascript
JavaScript 用cloneNode方法克隆节点的代码
2012/10/15 Javascript
原始XMLHttpRequest方法详情回顾
2013/11/28 Javascript
节点的插入之append()和appendTo()的用法介绍
2014/01/13 Javascript
JS实现不规则TAB选项卡效果代码
2015/09/16 Javascript
JS延时提示框实现方法详解
2015/11/26 Javascript
AngularJs动态加载模块和依赖注入详解
2016/01/11 Javascript
javascript 使用正则test( )第一次是 true,第二次是false
2017/02/22 Javascript
vue-router 权限控制的示例代码
2017/09/21 Javascript
详解vue+webpack+express中间件接口使用
2018/07/17 Javascript
ES6中let 和 const 的新特性
2018/09/03 Javascript
Vuex mutitons和actions初使用详解
2019/03/04 Javascript
vue keep-alive 动态删除组件缓存的例子
2019/11/04 Javascript
基于javascript实现贪吃蛇小游戏
2019/11/25 Javascript
[55:03]LGD vs EG 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
[00:36]我的中国心——Serenity vs Fnatic
2018/08/21 DOTA
Python实现的检测网站挂马程序
2014/11/30 Python
Python守护进程和脚本单例运行详解
2017/01/06 Python
Python3实现简单可学习的手写体识别(实例讲解)
2017/10/21 Python
解决python os.mkdir创建目录失败的问题
2018/10/16 Python
python使用magic模块进行文件类型识别方法
2018/12/08 Python
tensorflow 固定部分参数训练,只训练部分参数的实例
2020/01/20 Python
pandas DataFrame 数据选取,修改,切片的实现
2020/04/24 Python
你需要学会的8个Python列表技巧
2020/06/24 Python
matplotlib部件之套索Lasso的使用
2021/02/24 Python
CSS实现的一闪而过的图片闪光效果
2014/04/23 HTML / CSS
css3动画 小球滚动 js控制动画暂停
2019/11/29 HTML / CSS
Dodax奥地利:音乐、电影、书籍、玩具、电子产品等
2019/08/31 全球购物
学术会议主持词
2014/03/17 职场文书
租房协议书范例
2014/10/14 职场文书
2014年作风建设工作总结
2014/10/29 职场文书
小学生差生评语
2014/12/29 职场文书
介绍信格式样本
2015/05/05 职场文书