【问题标题】:Angular2 Components - Dynamic Inline StylesAngular2 组件 - 动态内联样式
【发布时间】:2016-09-21 22:47:44
【问题描述】:

我有一个具有countcolor 属性的组件。该组件应该显示count 数量的<div>s,并使用内联样式将其颜色更改为color

这是我目前所拥有的:

@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>

现在我有两个问题:

  1. 有没有更好的方法来渲染&lt;div&gt;s count 次而不创建虚拟数组?

  2. 更重要的是,没有设置内联样式。如果我硬编码像style="color: red" 这样的样式,它就可以工作。但是style="color: {{color}}" 没有。如上所示,该元素在没有任何样式的情况下呈现。

对于#2,我也尝试过使用nativeElement 的孩子:

@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 存在问题,但不太可能实现。
  • 谢谢你的小费。虽然这很糟糕。在这种情况下,组件的实现很笨拙。
  • 您的代码可以稍微优化一下。见stackoverflow.com/questions/36535629/…
  • @GünterZöchbauer .. 喜欢它!.. 这比我现在拥有的要优雅得多.. 感谢您的提示.. =)

标签: javascript css angular components


【解决方案1】:
<div *ngFor="let i of dummyArray" style="color: {{color}}>

color}} 之后缺少结束"

应避免以这种方式绑定到样式,因为它不适用于所有 Safari 版本(可能还有其他版本)。

改为使用

<div *ngFor="let i of dummyArray" [ngStyle]="{'color': color}">

【讨论】:

  • 抱歉.. 我在这里不小心错过了结尾".. 问题仍然存在.. 让我检查一下[ngStyle]="{'color': color}" 的东西并报告..
  • 这是我得到答案的最快速度.. 我数分钟才能将其标记为正确答案.. =)
  • 现在我有一个额外的问题,如果你能抽出时间来解决这个问题。如果我使用 *ngFor,我会丢失所有 css 动画。有没有办法解决?
  • 不确定您所说的“松散”是什么意思。有一些已知问题 ngFor 如何处理数组中不适用于动画的更改。见stackoverflow.com/questions/37217314/…
【解决方案2】:

关于你的第一个问题:

要创建一个包含十个 undefined 元素的数组,您可以这样做:

@Component({
  selector: 'my-app',
  template: `<div *ngFor="let i of arr(10); let index=index">hello {{index}}</div>`
})
export class AppComponent {
  arr=Array;
}

check this plunk

【讨论】:

  • 感谢您的提示。不幸的是,我只能接受一个答案作为正确答案。Gunter 的答案更正确,因为它回答了更紧迫的问题。=(
  • 欢迎您@AweSIM。我完全同意甘特的回答是正确的。此外,他的答案的爆炸速度必须计算:)。只是我对他的答案有所补充并发布了它。现在我看到他已经就我回答的问题对你的问题发表了评论:D
猜你喜欢
  • 2017-07-31
  • 1970-01-01
  • 2013-07-06
  • 1970-01-01
  • 1970-01-01
  • 2016-10-30
  • 2018-03-01
  • 2020-07-09
  • 2016-11-19
相关资源
最近更新 更多