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:

  1. Gibt es eine bessere Art und Weise zu Rendern, die <div>s count mal ohne anlegen einer dummy-array?

  2. Wichtiger ist, dass die inline-styles sind nicht festgelegt. Wenn ich fest Stile wie style="color: red" es funktioniert. Aber style="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 benutzerdefinierten ngFor Richtlinie, die das tut. Es ist ein Thema, zu unterstützen ngFor 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.. =)
InformationsquelleAutor AweSIM | 2016-05-24
Schreibe einen Kommentar