Ho un componente che ha una proprietà count
e color
. Il componente dovrebbe visualizzare il numero di <div>
s con uno stile in linea utilizzato per cambiare il colore in color
.Componenti Angular2 - Stili lineari dinamici
Ecco quello che ho finora:
@Component({
selector: 'my-control',
template: `<div *ngFor="let i of dummyArray" style="color: {{color}}"> COLOR = {{color}}</div>`
})
export class MyControl {
private _count: number;
@Input() set count(value: string) {
this._count = +value;
}
@Input() set color(value: string) {
this._color = value;
}
get dummyArray(): number[] {
let ret: number = [];
for (let i = 0; i < this._count; ++i) ret.push(i);
return ret;
}
get color(): string {
return this._color;
}
}
Ciò rende:
<my-control count="5" color="red">
<div>COLOR = red</div>
<div>COLOR = red</div>
<div>COLOR = red</div>
<div>COLOR = red</div>
<div>COLOR = red</div>
</my-control>
Ora ho due problemi con questo:
C'è un modo migliore per rendere il
<div>
scount
s senza creare un array fittizio?Ancora più importante, gli stili in linea non vengono impostati. Se ho stili hardcode come
style="color: red"
, funziona. Ma lostyle="color: {{color}}"
no. L'elemento è reso senza stili come puoi vedere sopra.
Per 2 #, ho anche provato ad utilizzare i bambini 's la nativeElement
così:
@Input() set count(value: string) {
this._count = +value;
this.update();
}
@Input() set color(value: string) {
this._color = value;
this.update();
}
update(): void {
for (let i = 0; i < this._count; ++i) {
this.renderer.setElementStyle(this.elRef.nativeElement.children[i], 'color', this._color);
}
}
Ma io ottenere un'eccezione accesso gli elementi figlio in quanto non esistono a quanto pare.
Come devo risolvere questi problemi?
Non c'è modo per noi 'ngFor' senza un array. È possibile creare la direttiva personalizzata 'ngFor' che lo fa. C'è un problema per supportare 'ngFor' con un numero invece di un array ma è improbabile che venga implementato. –
grazie per l'amico di punta .. questo fa schifo però .. rende un'implementazione goffo di componenti in questi casi .. – AweSIM
Il tuo codice può essere ottimizzato un po '. Vedi http://stackoverflow.com/questions/36535629/repeat-html-element-multiple-times-using-ngfor-based-on-a-number –