2017-09-26 66 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的自定义实现。