angularJs $templateCache

  模板加載後,AngularJS會將它默認緩存到 $templateCache 服務中。在實際生產中,能夠提早將模板緩存到一個定義模板的JavaScript文件中,這樣就不須要經過XHR來加載模板了html

  $templateCache 服務容許 $http 服務緩存通過XHR的模板請求,這樣它們就只會被請求一次。當一個模板被取到了,它的內容就會存儲在 $templateCache 中,用模板路徑做鍵。例如,當獲取下面的實例指令時,它會請求 templateUrl 而且把模板的內容放在 $templateCache 中:緩存

angular.module('myApp')
    .directive('notification', function($timeout) {
        return {
            restrict: 'A',
            scope: { ngModel: '=' },
            templateUrl: 'views/templates/notification.html',
}});

$templateCache 會 把 這 個 模 板 的 內 容 保 持 在 $templateCache('views/templates/notification.html') 中。若是已經預先在 $templateCache 中存放了測試所需的指令文件內容,就可使用 $templateCache 來阻止在指令的單元測試中再產生請求。可使用優秀的 karma-ng-html2js-preprocessor 包來把模板轉換成可在測試中使用的Angular模塊。服務器

利用 $templateCache
  在生產中部署應用時,咱們都但願應用的加載儘量快,以及儘量作出響應。使用XHR加載模板可能會致使Web應用緩慢或者有卡頓的感受。能夠經過將模板包裝爲JavaScript文件,而後連同應用程序的其餘部分一塊兒傳輸的方式僞造模板緩存加載,而不是經過XHR提取模板。關於如何有效地包裝模板的詳細信息,請參考 $templateCache 工具: grunt-angular-templates 。grunt

  默認狀況下,Angular沒法從本地 $tempalteCache 中找到模板時,會經過XHR提取模板。當XHR請求很慢,或者模板很大時,它可能會對應用的用戶體驗形成很大的負面影響。
  你能夠經過「僞造」 $templateCache 已經被填充的方式來避免這一延遲,這樣Angular就沒必要從遠程加載模板。能夠在JavaScript中手動實現這個技巧,就像這樣:工具

angular.module('myApp',[])
    .run(function($templateCache) {
        $templateCache.put('home.html', 'This is the home template');
});

  如今,當Angular須要提取名爲home.html的模板時,它會在 $templateCahce 中找到它,而無需從服務器提取。

單元測試

相關文章
相關標籤/搜索