如何在Angular 2组件中动态加载外部模板?

时间:2017-09-14 11:56:32

标签: angular

Angular 1 中,我们可以使用 templateUrl 动态加载不同的外部模板,如下所示。

var v=$("#cc").val();
v = v + 1;
$("#cc").val(v);

我的问题是如何在 Angular 2 组件下面实现相同的功能?

angular.module('testmodule).diretive('testDirective'), function(){
  return {
    restrict: 'EA',
    replace: true,
    scope: {
      data: '@',
    },
    templateUrl: function(element, attrs) {
       if(attrs.hasOwnProperty("attr")){
          return "views/test1.html";
       } else {
         return "views/test2.html"; 
       }                    
   }
}

1 个答案:

答案 0 :(得分:2)

如果您想动态加载组件,那么

@ViewChild('container', { read: ViewContainerRef })    container: ViewContainerRef; 
addComponent(){      
  var comp = this._cfr.resolveComponentFactory(ExpComponent);
  var expComponent = this.container.createComponent(comp);
}

请参阅Angular 2: How to Dynamically Add & remove Components

如果您只想更改模板网址,请尝试这样:

@Component({
  selector: 'app-simple-component',
  templateUrl: "{{tmplUrl}}"
})
class SomeComponent {
  tmplUrl: string= 'views/test1.html';
  constructor() {
       if(attrs.hasOwnProperty("attr")){
          this.tmplUrl ="views/test1.html";
       } else {
         this.tmplUrl ="views/test2.html"; 
       }    
  }
}