【发布时间】:2015-12-29 20:04:23
【问题描述】:
我正在尝试在 *ngClass 中添加多个值,这在以前的 alpha 版本中可以使用,而现在在 angular2 beta 中似乎无法使用:
<i *ngClass="['fa','fa-star']"></i>
它会产生错误:
异常:类型错误:无法读取未定义的属性“添加” [['fa','fa-star'] in PostView@30:27]
我在这里错过了什么?
【问题讨论】:
我正在尝试在 *ngClass 中添加多个值,这在以前的 alpha 版本中可以使用,而现在在 angular2 beta 中似乎无法使用:
<i *ngClass="['fa','fa-star']"></i>
它会产生错误:
异常:类型错误:无法读取未定义的属性“添加” [['fa','fa-star'] in PostView@30:27]
我在这里错过了什么?
【问题讨论】:
您应该使用方括号来创建属性绑定。见this plunk
<i [ngClass]="['fa','fa-star']"></i>
【讨论】:
[ngClass]="myDynamicArray")。
class="fa fa-star" 没有什么不同
class="fa fa-star"。
您还可以构建一个包含多个类的字符串。
在这种情况下,additionalClass 是一个包含类名的@Input var,active 是一个设置活动类的布尔值
<div [ngClass]="(additionalClass + ' ' + (active ? 'active' : ''))"></div>
【讨论】:
如果您不打算动态更改这些类,那么使用ngClass 就太过分了。您可以在模板中简单地使用class="fa fa-star"。
ngClass 应该在您想要动态打开和关闭它们时使用。文档中有一个示例:
你的组件会有一个方法:
setClasses() {
return {
saveable: this.canSave, // true
modified: !this.isUnchanged, // false
special: this.isSpecial, // true
}
}
然后在您的模板中使用ngClass,如下所示:
<div [ngClass]="setClasses()">This div is saveable and special</div>
【讨论】:
setClasses() 将在每次更改检测时被调用,从而每次都创建一个新对象。我强烈建议不要这样做。最好直接在视图模板中定义对象:[ngClass]="{ saveable: this.canSave, modified: !this.isUnchanged, special: this.isSpecial }"。有关此主题,另请参阅 one of many blogposts。