首页 > 代码库 > ngCloak实现Angular初始化闪烁问题的解决方法

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

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初始化闪烁问题的解决方法