如何使用 CachedResourceLoader 作为 Angular2 中 $templateCache 的等效机制?

How to use CachedResourceLoader as an equivalent mechanism to $templateCache in Angular2?

我知道有 2 similar 个问题,但没有任何解决方案。

所以我在 Angular repo 中发现了 this 问题,他们要求相同,即 Angular 2 中 templateCache 的替代方案,但他们关闭它说你可以使用 CachedResourceLoader。

所以我的问题是如何使用这个CachedResourceLoader来替换templateCache,我一直在google上搜索这个但是找不到任何相关内容所以也许我没有指出正确的方向或者我错过了什么。

这个问题的答案可能是其他 2 个类似问题的有效答案。

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'
});

CachedResourceLoader 存在但未记录 Angular 2+ 替代 AngularJS $templateCache:

An implementation of ResourceLoader that uses a template cache to avoid doing an actual ResourceLoader.

The template cache needs to be built and loaded into window.$templateCache via a separate mechanism.

它应该通过提供 ResourceLoader 提供商来工作:

{provide: ResourceLoader, useClass: CachedResourceLoader}

已在现有 RESOURCE_CACHE_PROVIDER 导出中定义。

并且 window.$templateCache 应该包含成对的 URL 和响应。

由于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 $templateCache 不同,CachedResourceLoader 不允许对缺少的模板提出请求。大多数情况下这是可取的行为。如果必须更改它,可以使用扩展默认 ResourceLoader implementation 的自定义实现。