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 相关文章推荐
使用jQuery实现dropdownlist的联动效果(sharepoint 2007)
Mar 30 Javascript
jQuery bxCarousel实现图片滚动切换效果示例代码
May 15 Javascript
原生javascript兼容性测试实例
Jul 01 Javascript
javascript中通过arguments参数伪装方法重载
Oct 08 Javascript
JavaScript获得当前网页来源页面(即上一页)的方法
Apr 03 Javascript
Backbone.js的一些使用技巧
Jul 01 Javascript
jQuery验证插件validate使用方法详解
Sep 13 Javascript
React中上传图片到七牛的示例代码
Oct 10 Javascript
微信小程序实现tab切换效果
Nov 21 Javascript
JS实现骰子3D旋转效果
Oct 24 Javascript
React-vscode使用jsx语法的问题及解决方法
Jun 21 Javascript
vue中利用mqtt服务端实现即时通讯的步骤记录
Jul 01 Vue.js
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
PHP脚本数据库功能详解(下)
2006/10/09 PHP
PHP flush()与ob_flush()的区别详解
2013/06/03 PHP
php调用新浪短链接API的方法
2014/11/08 PHP
golang与php实现计算两个经纬度之间距离的方法
2016/07/22 PHP
在Javascript中为String对象添加trim,ltrim,rtrim方法
2006/09/22 Javascript
浅谈javascript对象模型和function对象
2014/12/26 Javascript
js中split和replace的用法实例
2015/02/28 Javascript
JS+CSS实现简易实用的滑动门菜单效果
2015/09/18 Javascript
JavaScript判断数组是否存在key的简单实例
2016/08/03 Javascript
js数组去重的hash方法
2016/12/22 Javascript
JavaScript中数组的各种操作的总结(必看篇)
2017/02/13 Javascript
angular实现IM聊天图片发送实例
2017/05/08 Javascript
JS实现的简单标签点击切换功能示例
2017/09/21 Javascript
认识jQuery的Promise的具体使用方法
2017/10/10 jQuery
详解VUE中常用的几种import(模块、文件)引入方式
2018/07/03 Javascript
vue工程全局设置ajax的等待动效的方法
2019/02/22 Javascript
[50:02]完美世界DOTA2联赛PWL S2 Magma vs FTD 第三场 11.29
2020/12/03 DOTA
深入浅析ImageMagick命令执行漏洞
2016/10/11 Python
基于Python数据可视化利器Matplotlib,绘图入门篇,Pyplot详解
2017/10/13 Python
Python数据结构与算法之字典树实现方法示例
2017/12/13 Python
python实现图片文件批量重命名
2020/03/23 Python
Python设计模式之观察者模式原理与用法详解
2019/01/16 Python
Python 元组操作总结
2019/09/18 Python
python GUI库图形界面开发之PyQt5表格控件QTableView详细使用方法与实例
2020/03/01 Python
ansible-playbook实现自动部署KVM及安装python3的详细教程
2020/05/11 Python
python 简单的调用有道翻译
2020/11/25 Python
iPad和Surface Pro蓝牙键盘:Brydge
2018/11/10 全球购物
国际经济贸易专业推荐信
2013/11/06 职场文书
大学同学聚会邀请函
2014/01/19 职场文书
党员个人剖析材料
2014/09/30 职场文书
标准离婚协议书(2014版)
2014/10/05 职场文书
专业技术职务聘任证明
2015/03/02 职场文书
小学中队长竞选稿
2015/11/20 职场文书
React如何创建组件
2021/06/27 Javascript
Python学习之包与模块详解
2022/03/19 Python
nginx七层负载均衡配置详解
2022/07/15 Servers