在角度2中动态加载HTML模板

前端之家收集整理的这篇文章主要介绍了在角度2中动态加载HTML模板前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我已经使用了包含AppComponent的angular-cli创建了一个项目,如下所示:
  1. import { Component } from '@angular/core';
  2. @Component({
  3. selector: 'app-root',templateUrl: './app.component.html',styleUrls: ['./app.component.css']
  4. })
  5. export class AppComponent {
  6. title = 'app works!';
  7. }

和app.component.html as

  1. <h1>
  2. Good Morning,{{title}}
  3. </h1>

所以当我使用ng构建它生成一些这样的文件./dist/main.bundle.js,其内容一些代码如下 –

  1. /* 586 */
  2. /***/ function(module,exports) {
  3.  
  4. module.exports = "<h1>\n Good Morning,{{title}}\n</h1>\n"
  5.  
  6. /***/ },/* 587 */

这意味着,在编译时,编译器/ bundle-er正在读取html文件,并将它们连接到生成的js文件中。

但在我的情况下,html也是从服务器端动态和内容驱动的。可以说,我的模板文件不是html,而是app.component.jsp,而是驻留在一些不同的服务器或文件夹上。

此外,JSP文件有时返回< h1>早安,{{title}}< / h1>
并且有时< h1> Good Afternoon,{{title}}< / h1>取决于当前的服务器时间。

如何实现这个功能

我所了解的是,我需要定义一些加载器函数说:loadDynamicTemplate(template_url)

并且需要在Component decorator模板属性上使用该loader功能。在这种情况下,当生成main.bundle.JS时,它也会使用该函数。所以在运行时角度会调用这个函数,并通过ajax加载HTML并使用它。

更新1

Here我发现SystemJS和Webpack有一些区别。我也发现如果我们可以使用SystemJS,我们可以在运行时加载HTML文件。所以我相信这个问题可以通过SystemJS配置来解决。但是,另一个问题是发挥作用,虽然我认为这可能是一个单独的问题。所以我发布了一个新的问题来排除here

可能如果这个问题得到解决,我会尝试使用SystemJS,然后在这里解决这个问题,如果它有帮助。

解决方法

你可以在我的模板组件中使用[innerHtml]这样的东西(我没有测试):
  1. @Component({
  2. selector: 'my-template',template: `
  3. <div [innerHtml]="myTemplate">
  4. </div>
  5. `})
  6. export public class MyTemplate {
  7. private myTemplate: any = "";
  8. @Input() url: string;
  9. constructor(http: Http) {
  10. http.get("/path-to-your-jsp").map((html:any) => this.myTemplate = html);
  11. }
  12. }

猜你在找的HTML相关文章