【发布时间】:2017-04-08 18:18:27
【问题描述】:
我使用 angular-cli 创建了一个项目,其中包含 AppComponent 如下:
import { Component } from '@angular/core';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
title = 'app works!';
}
和app.component.html一样
<h1>
Good Morning, {{title}}
</h1>
因此,当我使用ng build 构建它时,它会生成一些类似 ./dist/main.bundle.js 的文件,其中包含如下代码-
/* 586 */
/***/ function(module, exports) {
module.exports = "<h1>\n Good Morning, {{title}}\n</h1>\n"
/***/ },
/* 587 */
这意味着,在构建时,编译器/捆绑器正在读取 html 文件并将它们连接到生成的 js 文件中。
但在我的情况下,html 也是 动态 并且从服务器端驱动内容。可以说,我的模板文件不是 html,而是 app.component.jsp 并且完全驻留在某个不同的服务器或文件夹上。
此外,JSP 文件有时会返回 <h1>Good Morning, {{title}}</h1>
有时<h1>Good Afternoon, {{title}}</h1> 取决于当前服务器时间。
如何实现这个功能?
我的理解是,我需要定义某种加载器函数说:loadDynamicTemplate(template_url)
并且需要在组件装饰器模板属性上使用该加载器功能。在这种情况下,当生成 main.bundle.JS 时,它也会使用该函数。所以在运行时 Angular 会调用这个函数并通过 ajax 加载 HTML 并使用它。
更新 1
Here 我发现 SystemJS 和 Webpack 之间有些区别。我还发现如果我们可以使用 SystemJS,我们可以在运行时加载 HTML 文件。所以我相信这个问题可以通过 SystemJS 配置来解决。但是为此,另一个问题开始发挥作用,尽管我相信这可能是一个单独的问题。所以我发布了一个新问题来解决它here。
如果这个问题得到解决,我可能会尝试使用 SystemJS,如果有帮助,请在此处发布解决方案。
【问题讨论】:
-
这在 Angular2 中并不常见。见stackoverflow.com/questions/34784778/…
-
在我的情况下,我的所有组件都将具有相同的行为。将我的所有组件定义为动态组件确实是有问题的。所以实际上我正在寻找这样的东西。
template: "<my-template url='./app.component.html'></my-template>"。这里my-template可能是一个指令,它将动态加载HTML。此外,它应该保持所有其他功能完好无损。因为它应该与templateUrl: './app.component.html'一样工作 -
我知道这不太常见。实际上,我有一个带有 Adobe AEM 的服务器端内容管理系统。我想将其用于其出色的创作功能。由于 Angular2 是一个很棒的框架,我相信应该有一些解决方法。 (无需更改这么多代码,我只想通过 AJAX 调用在运行时提供模板)。请帮忙。
-
您可以在现有组件中加载 HTML,但只能加载纯 HTML。如果你要将它变成 Angular 组件、指令或数据或事件绑定,它必须在已编译组件的模板中。
-
@ParthaSarathiGhosh,您尝试过 ng-dynamic 库吗?我认为它确实可以完成这项工作:github.com/laco0416/ng-dynamic
标签: angular typescript aem angular-cli angular2-compiler