У меня есть компонент, который имеет count
и color
. Компонент должен отображать count
номер <div>
s со встроенным стилем, используемым для изменения цвета до color
.Angular2 Components - Dynamic Inline Styles
Вот что я до сих пор:
@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;
}
}
Это делает:
<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>
Теперь у меня есть две проблемы с этим:
Есть ли лучший способ сделать
<div>
scount
раз без создания фиктивного массива?Что еще более важно, встроенные стили не устанавливаются. Если я жестко стилю, например
style="color: red"
, он работает. Ноstyle="color: {{color}}"
нет. Элемент отображается без каких-либо стилей, как вы можете видеть выше.
Для # 2, я также пытался использовать детям nativeElement
«s, а также:
@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);
}
}
Но я получаю исключение доступа к дочерним элементам, поскольку они не существуют, по-видимому.
Как я могу решить эти проблемы?
Там нет никакого способа нам 'ngFor' без массива. Вы можете создать свою собственную директиву 'ngFor', которая сделает это. Существует проблема поддержки «ngFor» числом вместо массива, но вряд ли оно будет реализовано. –
спасибо за подсказку. Это отстой, хотя .. делает для неуклюжей реализации компонентов в таких случаях. – AweSIM
Ваш код может быть оптимизирован. См. Http://stackoverflow.com/questions/36535629/repeat-html-element-multiple-times-using-ngfor-based-on-a-number –