Ich habe eine Komponente, die eine count
und eine color
Eigenschaft hat. Die Komponente soll count
Nummer <div>
s mit einem Inline-Stil anzeigen, der verwendet wird, um seine Farbe in zu ändern.Angular2 Komponenten - Dynamische Inline-Stile
Hier ist, was ich bisher habe:
@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;
}
}
Dies macht:
<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>
Jetzt habe ich zwei Probleme mit diesem:
Gibt es eine bessere Art und Weise zu machen, die
<div>
scount
mal ohne ein Dummy-Array zu erstellen?Noch wichtiger ist, dass die Inline-Stile nicht festgelegt werden. Wenn ich Stile wie
style="color: red"
fest codiere, funktioniert es. Aberstyle="color: {{color}}"
nicht. Das Element wird ohne Stile wiedergegeben, wie Sie oben sehen können.@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); } }
Aber ich bekomme Ausnahme der untergeordneten Elemente zugreifen, da sie scheinbar nicht vorhanden ist:
Für # 2, ich habe auch die nativeElement
‚s Kinder auch versucht, mit.
Wie soll ich diese Probleme lösen?
Es gibt keine Möglichkeit, zu uns 'ngFor' ohne ein Array. Sie könnten Ihre benutzerdefinierte 'ngFor'-Anweisung erstellen, die das tut. Es gibt ein Problem, 'ngFor' mit einer Nummer anstelle eines Arrays zu unterstützen, aber es ist unwahrscheinlich, dass es implementiert wird. –
danke für den Tipp Kumpel .. das saugt aber .. macht für eine plumpe Implementierung von Komponenten in solchen Fällen .. – AweSIM
Ihr Code kann ein wenig optimiert werden. Siehe http://stackoverflow.com/questions/36535629/repeat-html-element-multiple-times-using-ngfor-based-on-a-number –