【问题标题】:I have updated to Angular 8 but my ngStyle is not updating when changing CSS classes我已更新到 Angular 8,但更改 CSS 类时我的 ngStyle 没有更新
【发布时间】:2019-12-09 04:15:09
【问题描述】:

我有这样的分层风格:

[ngStyle]="columnStyleArray[i1][i2].style" 应用于*ngFor. 中的组件

我使用双向绑定进行更改。

到目前为止,在 Angular 7 中这工作正常,但当我升级到 Angular 8 时,它不再工作了。奇怪的是,在调整浏览器大小后,新的 CSS 会应用并变得可见。

不确定这是 Angular 8 的错误还是我忽略了一些东西。

尝试更改设置
封装:ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush

<div class="template-container" *ngFor="let section of mailtemplateArray; let i1 = index">
<div [ngStyle]="sectionStyleArray[i1].style"></div>
</div> 

没有任何错误代码,但 CSS 仅在窗口调整大小后应用

【问题讨论】:

  • 你能告诉我以下属性的内容吗:columnStyleArray[i1][i2].style
  • style = { 'background-color': '', 'background-repeat': 'no-repeat', 'background-size': '100%', 'background-url': ' '}

标签: css angular angular-material angular8


【解决方案1】:

假设columnStyleArray[i1][i2].style 不是样式对象({ styleName: 'styleValue' }),您似乎使用了错误的语法。试试这个:

[ngStyle]="{ propertyName: columnStyleArray[i1][i2].style }"

这里有一个Working Sample StackBlitz 供您参考。

【讨论】:

  • 只要表达式columnStyleArray[i1][i2].style返回键值对,OP的语法就是正确的:angular.io/api/common/NgStyle#description
  • 它可能一个样式对象,因为它适用于 Angular 7 的 OP。
【解决方案2】:

尝试更改ChangeDetection 策略。对我来说,听起来你没有触发 DOM 更新,因为你正在改变你的对象,而 OnPush 策略严格寻找不可变的更改。

如果更改策略有效,您可以不可变地更新集合(措辞?),或者您可以使用 ChangeDetectorRef 方法 detectChanges 触发 DOM 更新。

【讨论】:

  • 没有不幸的 ChangeDetection 设置为默认值或 OnPush 不起作用。尝试手动触发它也不起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多