2017-09-14 1 views
1

In Angular 1 können wir templateUrl verwenden, um verschiedene externe Vorlagen wie unten dynamisch zu laden.Wie wird eine externe Vorlage in Angular 2 Component dynamisch geladen?

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"; 
     }      
    } 
} 

Meine Frage ist, wie in unten Angular 2 Komponente die gleiche Funktion zu implementieren?

@Component({ 
    selector: 'testDirective, [testDirective]', 
    template: require('./views/test1.html') or require ('./views/test2.html') 
}) 
export class Angular2Component { 
    ... 
} 
+1

https: //stackoverflow.com/questions/38888008/how-can-i-use-create-dynamic-template-to-compile-dynamic-component-with -angular –

+0

Mögliches Duplikat von [Wie kann ich dynamische Vorlagen verwenden/erstellen, um dynamische Komponenten mit Angular 2.0 zu kompilieren?] (https://stackoverflow.com/questions/38888008/how-can-i-use-create-dynamic-template -to-compile-dynamic-component-with-eckig) –

Antwort

1

Wenn Sie Komponente geladen werden soll dynamisch dann

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

Siehe Angular 2: How to Dynamically Add & remove Components

Wenn Sie nur die Vorlage URL ändern möchten dann so versuchen:

@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"; 
     }  
    } 
} 
+0

danke für deine Antwort, tatsächlich verwende ich Webpack, um die Vorlagendatei zu verpacken, für die zweite Möglichkeit, sollen wir verwenden template: require ('{{tmplUrl}}' ') templateUrl zu ersetzen: "{{tmplUrl}}" –

+0

Ja, das sollte funktionieren –