Ng-cloak解決angularJs中的閃爍問題

引言

        上一篇博客寫到了使用ng-bind指令解決頁面顯示{{express}}問題,此次咱們來使用另外一種方法解決一下。javascript

         在使用AngularJS開發評教移動端的時候,咱們常常會看見在Chrome這類快速解析的瀏覽器上會閃過{{express}}。這是因爲JavaScript去操做DOM,都會等待DOM加載完成以後。一樣,anguarjs等DOM加載完成以後纔回去解析html,因此瀏覽器上會出現閃爍的狀況。css

         解決這個問題,其實angularjs給了一個指令——ng-cloak。咱們能夠在須要的地方加上這個指令就能夠。html

  1. <span style="font-size:18px;"><!DOCTYPE html>  
  2. <html ng-app>  
  3. <head>  
  4.     <meta charset="utf-8">  
  5.     <title>ng-bind directive</title>  
  6. </head>  
  7. <body ng-controller="HelloController">  
  8. <div ng-cloak>  
  9.     <p>直接輸出字符串字面值</p>  
  10.     Hello {{"World"}}  
  11.     <hr>  
  12. </div>  
  13. </body>  
  14. <script src="js/angular-1.3.0.js"></script>  
  15. </html></span>  


原理

         Ng-cloak實現原理爲:頁面初始化是在DOM的header增長一行css代碼。
java

  1. <span style="font-size:18px;"><style type="text/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;}  
  2. </style></span>  


          Angualr將帶有ng-cloak的元素設置爲display:none。等到angularjs解析到帶有ng-cloak節點的時候,會把元素上ng-cloak  attribute和calss同時remove掉,這樣就防止了節點的閃爍。angularjs

總結

           全部的事情都像老師說的那樣:方法總比問題多!express

相關文章
相關標籤/搜索