2017-08-02 2 views
2

Ich habe noch kein Code-Snippet gefunden und das Dokument ist zu kurz. Also meine Frage ist, wie param zu einer ng-Vorlage und wie man den Index zurück erhalten? Intuitiv sollte das folgende funktionieren, aber es wirft nur "undefined". Jede Hilfe wird geschätzt.Wie das Context-Objekt an die eingebettete View übergeben wird, die mit der ng-template erstellt wurde

@ViewChild("vc", { read: ViewContainerRef }) vc: ViewContainerRef; 
    @ViewChild("tpl") tpl: TemplateRef<any>; 

    ngAfterViewInit() { 
    this.vc.createEmbeddedView(this.tpl, 
     new Book("The Complete Guide to Angular 4", 55)); 
    this.vc.createEmbeddedView(this.tpl, 
     new Book("Building Web Components with TypeScript and Angular 4", 48)); 
    } 
    deleteBook(index) { 
    console.log("deleteBook index ", index); 
    } 

<div class="container"> 
    <div class="card-deck"> 
     <ng-container #vc></ng-container> 
    </div> 
    <ng-template #tpl let-book="book" let-index="index"> 
     <div class="card"> 
      <img class="card-img-top" src="..." alt="Card image cap"> 
      <div class="card-block"> 
       <h4 class="card-title">Title: {{book.title}}</h4> 
       <p class="card-text">Price: {{book.price}}</p> 
       <button type="button" class="btn btn-primary" (click)="deleteBook(index)">Delete</button> 

      </div> 
     </div> 
    </ng-template> 
</div> 

Antwort

1

Sie benötigen ein Objekt mit dem Schlüssel zu übergeben, die die let-keyname Syntax entsprechen:

<ng-template #tpl let-book="book" let-index="index"> 
    ... 

this.vc.createEmbeddedView(this.tpl, { 
    book: new Book("The Complete Guide to Angular 4", 55), 
    index: someIndex 
}); 
+0

Dank Maximus, ich habe nicht wirklich eine Antwort, die in Kürze erwartet. – Bela

+0

Ich habe dieses Change Detection-Problem und hinzugefügt this.changeDetectorRef.detectChanges(); to ngAfterViewInit(), um eine neue zu erzwingen. Es scheint jetzt OK. ng: ///AppModule/HomeComponent.ngfactory.js: 14 FEHLER Fehler: ExpressionChangedAfterItHasBeenCheckedError: Der Ausdruck hat sich geändert, nachdem er überprüft wurde. Vorheriger Wert: 'undefiniert'. Aktueller Wert: 'Die vollständige Anleitung zu Angular 4'. Es scheint so, als ob die Ansicht erstellt wurde, nachdem ihr übergeordnetes Element und ihre untergeordneten Elemente überprüft wurden. Wurde es in einem Change Detection-Hook erstellt? – Bela

+0

Gern geschehen, also hat es funktioniert? In Bezug auf den Fehler, den Sie erwähnten, sollten Sie lesen [Alles, was Sie über den Fehler 'ExpressionChangedAfterItHasBeenCheckedError' wissen müssen] (https://hackernoon.com/everything-you-need-to-know-about-the-expressionchangedataheckeckror-error-e3fd9ce7dbb4). Sie können auch eine andere Frage stellen –

Verwandte Themen