Uso Angular 2-rc3 e ho un Component
e voglio applicare la transizione, solo in un altro modo. Ecco la mia componente:Componente di eliminazione con modello in linea
import { Component, Input } from '@angular/core';
@Component({
selector: 'my-list',
template: `<ul>
<li *ngFor="let item of data">
-- insert template here --
<ng-content></ng-content>
</li>
</ul>`
})
export class MyListComponent {
@Input() data: any[];
}
e lo uso come questo:
<my-list [data]="cars">
<div>{{item.make | uppercase}}</div>
</my-list>
Come potete vedere, sto cercando di definire un modello di linea che verrà utilizzato dalla mia componente. Ora questo è terribilmente sbagliato. Prima di tutto, un'eccezione databinding lo dice can't read property 'make' of undefined
. Sta cercando di leggere item.make
dal mio componente circostante, non dallo MyListComponent
. Ma anche se disattivare temporaneamente questo per ora:
<my-list [data]="cars">
<div>{item.make | uppercase}</div>
</my-list>
Poi appare il secondo problema:
-- insert template here --
-- insert template here --
-- insert template here --
-- insert template here --
{item.make | uppercase}
Quindi angolare in realtà non copiare il modello da utilizzare all'interno del *ngFor
, semplicemente lega gli elementi e finiscono associati all'ultima voce.
Come posso farlo funzionare?
Ho avuto lo stesso problema con AngularJS, dove petebacondarwin posted a solution to manipulate the DOM through compile, che è stato grande. Ho questa opzione anche con Angular 2 iniettando ElementRef
nel mio componente, ma! Una grande differenza è che compile
in AngularJS è andato via prima del database, il che significa che non c'erano problemi nell'uso di {{item.make}}
nel modello. Con Angular 2, questo sembra essere un no-go poiché {{item}}
viene analizzato in precedenza. Quindi qual è il modo migliore per farlo? Usando la notazione leggermente diversa [[item]]
e la stringa che sostituisce l'intera cosa non sembra il modo più elegante ...
Grazie in anticipo!
// Modifica: ecco uno Plnkr che riproduce il problema.
Sarebbe bello avere un Plunker che permetta di riprodurre dove tutto è a posto come lo si vuole usare. Trovo difficile, ad esempio, capire che cosa significhi "inserire il modello qui" nel modo esatto. –
Aggiunto! Grazie. –
@JPtenBerge Ho riscontrato un problema simile e [ho trovato una soluzione] (http://stackoverflow.com/questions/38174837/how-to-create-a-component-with-a-dynamic-template-component-transclude- with-in) – Ross