Angular 2中的$templateCache是什么?

3
在Angular 1中,我们使用$templateCache来避免在引导应用程序时从服务器XHR下载每个模板。在Angular 2中,似乎没有这样的机制是预先构建好的。
我能做的是在编译器中替换XHR:
function myXhr() {};
myXhr.prototype.get = function(url) {
    return new Promise(function(resolve, reject) {
        $.ajax({
            url:url,
            method:'GET',
            success:resolve,
            error:reject
        });
    });
};

ng.platform.browser.bootstrap(MyApp, [
    ng.core.provide(ng.compiler.XHR, {useClass:myXhr})
]);

然后调整我的XHR getter,首先检查本地缓存。这是首选方法吗?

1
似乎是重复的https://dev59.com/aFsW5IYBdhLWcg3w8q_2,虽然是在同一天提问的,但迄今为止还没有解决方案。 - Adam Reis
仍然没有好的解决方案,只有很多敷衍了事的说辞。 - superluminary
2个回答

3

我已经习惯了在typescript中为所有组件使用模板字符串。我发现把html和视图逻辑放在同一个TS文件中非常方便。 你也可以考虑使用像JSPMWebPack这样的模块加载器/捆绑器。这些工具能够使用类似下面的模块语法将所有模板引入到构建中:

let html = require('./about.html!text');
    @Component({
        selector:"my-about",
        template:html
    })

正是我所需要的,而且我不需要使用绝对路径来引用模板。现在只要有一种方法可以将其转换为ES6导入语法就好了?谢谢。 - Randal Cunanan
模块未找到:错误:无法解析“text”,应安装哪个? - Mike

2
Angular2中的缓存工作原理如下:
  • 在应用层,调用ViewContainerRef上的方法(例如ViewContainerRef.createComponent)。

  • reflector.registerType注册组件类型作为注释。

  • ComponentResolver.resolveComponent现在返回一个ComponentFactory

  • ComponentResolver.resolveComponent在返回Promise之前首先检查类型注释。

Angular 2.0 Alpha中的初始设计:

ProtoView是模板编译的结果,是原型视图,Angular根据编译后的模板高效地创建该视图的实例。

RenderProtoViewRef是Application Context中ProtoViewRef的对应项。但与ProtoViewRef不同的是,RenderProtoViewRef包含所有静态嵌套Proto Views,这些Proto Views被递归合并成单个Render Proto View。

不再可能实现ng-include。编译器需要ComponentDirective才能编译HTML。因此,无法仅编译HTML并将其包含到视图中。

自初始Angular 2.0 Beta以来的相关更改:

编译器重命名为ComponentResolver,Compiler.compileInHost已重命名为ComponentResolver.resolveComponent。

Renderer接口现在在普通本地节点上操作,而不是RenderElementRefs或RenderViewRefs。

AppViewManager已重命名为ViewUtils,仅是一个私有实用程序服务。

参考资料


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接