Angular2 Komponenten - Dynamische Inline-Styles
Ich habe eine Komponente, die count
und ein color
Eigenschaft. Die Komponente angezeigt werden sollen count
Anzahl der <div>
s mit einer inline-Stil verwendet, seine Farbe zu ändern, um color
.
Hier ist, was ich habe, so weit:
@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;
}
}
Macht dies:
<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>
Nun habe ich zwei Probleme mit diesem:
-
Gibt es eine bessere Art und Weise zu Rendern, die
<div>
scount
mal ohne anlegen einer dummy-array? -
Wichtiger ist, dass die inline-styles sind nicht festgelegt. Wenn ich fest Stile wie
style="color: red"
es funktioniert. Aberstyle="color: {{color}}"
nicht. Das element gerendert wird, ohne Stile, wie Sie oben sehen können.
Für #2 habe ich auch versucht, mit Hilfe der nativeElement
's als auch Kinder:
@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 exception der Zugriff auf die Kind-Elemente, wie Sie nicht existieren offenbar.
Wie gehe ich bei der Lösung dieser Probleme?
- Es gibt keinen Weg zu uns
ngFor
ohne ein array. Sie können Ihre benutzerdefiniertenngFor
Richtlinie, die das tut. Es ist ein Thema, zu unterstützenngFor
mit einer Zahl anstelle von einem array, aber es ist unwahrscheinlich, dass Sie umgesetzt werden. - danke für den Tipp-mate.. das nervt zwar.. macht für eine plumpe Umsetzung der Komponenten in solchen Fällen..
- Ihr code kann optimiert werden ein wenig. Siehe stackoverflow.com/questions/36535629/...
- Liebe es!!.. das ist viel eleganter als das, was ich momentan haben.. danke für den Tipp.. =)
Du musst angemeldet sein, um einen Kommentar abzugeben.
fehlt die schließende
"
nachcolor}}
Bindung, auf diese Weise zu der Art sollte vermieden werden, denn es funktioniert nicht in allen Safari-Versionen (vielleicht auch andere).
Stattdessen
"
versehentlich hier.. die Frage bleibt immer noch.. lassen Sie mich überprüfen Sie die[ngStyle]="{'color': color}"
Ding und Bericht zurück..ngFor
behandelt änderungen im array, die nicht funktionieren gut mit animation. Siehe stackoverflow.com/questions/37217314/...Über Ihre erste Frage:
Erstellen Sie ein array mit zehn
undefined
Elemente, die man tun könnte:überprüfen Sie diese plunk