码迷,mamicode.com
首页 > 其他好文 > 详细

ngCloak实现Angular初始化闪烁问题的解决方法

时间:2017-03-02 11:08:44      阅读:367      评论:0      收藏:0      [点我收藏+]

标签:var   orm   exp   dom   data   define   remove   undefined   hidden   

angular.js开发应用初始化时会遇见{{express}}闪烁问题。这个问题是应为JS去操作DOM,都会等待DOM加载完成造成的。

angular中为我们提供了ng-cloak来解决闪烁的方案,同时对于bing文字{{express}}我们也可以改为ng-bind来实现避免。

<div>{{hello allen}}</div>

 

那么ng-cloak的原理是如何解决这样一个bug的呢?

angualr在初始化时会给页面的head动态增加一行css代码,如下所示:

<style type="text/css">

  @charset "UTF-8";[ng\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide:not(.ng-hide-animate){

    display:none !important;

  }

  ng\:form{

    display:block;

  }

  .ng-animate-shim{

    visibility:hidden;

  }

  .ng-anchor{

    position:absolute;

  }

</style>

从上面的样式知道ng-clock属性或class元素被设置为display:none,在等到angular解析到带有ng-clock的节点时候,

会把attribute和class为ng-cloak的元素remove掉ng-cloak.这样就可以防止节点的的闪烁。

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

如果浏览器渲染还比angular.js加入css还快的话,则直接在页面head中加入样式。

ngCloak实现Angular初始化闪烁问题的解决方法

标签:var   orm   exp   dom   data   define   remove   undefined   hidden   

原文地址:http://www.cnblogs.com/lywh/p/6489154.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!