ngCloak 實現 angular 初始化閃爍最佳實務

來源:互聯網
上載者:User


在做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">{{  'hello IE7' }}</div><div id="template2" ng-bing="'hello IE7'"></div>

angular講ng-cloak實現為一個directive,並會在初始化的時候在DOM的heade增加一行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{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;}</style>

從上面我們可以看見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的原理和解決方案已經完成,歡迎繼續關注angular的後續經驗篇分享。


本文出自 “破狼” 部落格,請務必保留此出處http://whitewolfblog.blog.51cto.com/3973901/1346222

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.