8

in this plunker gesehen abholen, ich bin ein HTML zu einem meiner Elemente dynamisch hinzugefügt, die dazu läuft darauf hinaus:Wie man Angular 2 Wie dynamisch hinzugefügt Router Richtlinie

@Component({ 
    selector: 'my-comp', 
    template: `<span [innerHTML]="link"></span>`, 
}) export class MyComponent { 
    private linkContent = '<a routerLink="/my-route">GoTo Route</a>'; 
    private link; 

    constructor(sanitizer: DomSanitizer) { 
     this.link = sanitizer.bypassSecurityTrustHtml(linkContent); 
    } 
} 

Dies führt zu <a routerLink="/my-route">GoTo Route</a> sein hinzugefügt, um das DOM, aber Angular weiß nichts über die Direktive für dieses Element, und bindet nicht daran. Also, wenn Sie auf den Link klicken, führt es zu einem vollständigen Neuladen mit Re-Bootstrap (das funktioniert nicht in Plunk, es gibt nur eine 404).

Frage: wie angular zu sagen, durch das DOM (oder seinen Teil oder sogar ein einzelnes Element) gehen und Komponenteninitialisierung durchführen, wenn nötig?

+0

mit Ich bin Ich bin mir nicht sicher, ob ich verstanden habe, was Sie hier machen wollen, aber bei Ihrem Plunker ist Ihr Problem, dass der Login-Link nicht funktioniert, oder? Wenn ja, warum verwenden Sie den 'routerLink' in Ihrer Lokalisierung, anstatt ihn in Ihrer Vorlage zu verwenden? – brians69

+0

Hey .. Wie haben Sie das Problem gelöst, um Routerlink zu Anchor-Tag aus Typ Skriptklasse dynamisch hinzuzufügen. Ich habe versucht, dynamische Komponente zu erstellen, aber keinen Erfolg. Bitte hilf mir. –

+0

@MeenakshiKumari Ich ging diesen Pfad schließlich nicht, aber restrukturierte meinen Code, um keine dynamischen Verbindungen stattdessen zu haben – Dethariel

Antwort

3

Angular2 verarbeitet kein HTML, das in irgendeiner Weise außer der Bereinigung dynamisch hinzugefügt wird.

Übergeben '<a routerLink="/my-route">GoTo Route</a>' zu innerHTML macht genau das, übergibt diese Zeichenfolge an das DOM, aber sonst nichts. Es gibt keine Direktive, die instanziiert oder angewendet wird.

Wenn Sie HTML hinzufügen müssen dynamisch, dass verwendet Angular2 Bindungen, Richtlinien oder Komponenten können Sie den HTML-Code zu einem Komponenten-Template hinzu, und fügen Sie dynamisch diese Komponente ViewContainerRef.createComponent() wie gezeigt, zum Beispiel in Angular 2 dynamic tabs with user-click chosen components