2017-09-26 51 views
1

我知道有2similar關於這個問題,但沒有任何解決方案。

所以我在Angular repo中發現this問題,他們要求相同的,即Angular 2中templateCache的替代方法,但他們關閉它說你可以使用CachedResourceLoader。

所以我的問題是如何使用這個CachedResourceLoader更換templateCache,我一直在尋找關於這個谷歌,但找不到任何相關的內容,所以也許我沒有指向正確的方向還是我錯過了什麼。

對於這個問題的答案可能是其他兩個類似問題的有效答案。

代碼示例將templateCache在AngularJS提供的功能:

添加

var myApp = angular.module('myApp', []); 
myApp.run(function($templateCache) { 
    $templateCache.put('templateId.html', 'This is the content of the template'); 
}); 

通過$ templateCache檢索

$templateCache.get('templateId.html') 

或檢索:

myApp.component('myComponent', { 
    templateUrl: 'templateId.html' 
}); 
+0

該問題未指定您打算如何使用它。 – estus

+0

我想爲angular 2提供與爲angular 1提供的templateCache相同的功能。即,第一次使用模板時,它會加載到模板緩存中以便快速檢索。您可以直接在模板標籤中將模板加載到緩存中,也可以直接使用$ templateCache服務。 – Javiere

回答

2

CachedResourceLoader是現有的尚未無證角2+替代AngularJS $templateCache

使用模板緩存來 避免做一個真正的ResourceLoader的ResourceLoader的實現。

模板緩存 需要構建並加載到窗口$ templateCache通過一個 單獨的機制。

它應該通過提供ResourceLoader提供商合作:其中在現有RESOURCE_CACHE_PROVIDER出口已經定義

{provide: ResourceLoader, useClass: CachedResourceLoader} 

window.$templateCache應該包含一對網址和回覆。

由於ResourceLoader應在編譯前指定,因此應該不在應用程序模塊中提供,而應在編譯器選項中提供。

這裏是an example

import {RESOURCE_CACHE_PROVIDER} from '@angular/platform-browser-dynamic'; 
import {COMPILER_OPTIONS} from '@angular/core'; 

window['$templateCache'] = { 'app.html': `...`}; 

platformBrowserDynamic({ 
    provide: COMPILER_OPTIONS, 
    useValue: { providers: [RESOURCE_CACHE_PROVIDER] }, 
    multi: true 
}).bootstrapModule(AppModule) 

與之相對AngularJS $templateCacheCachedResourceLoader不允許做失蹤模板請求。大多數情況下這是理想的行爲。如果必須更改,則可以使用擴展默認ResourceLoader implementation的自定義實現。