Angular 2通过插值将值添加到ngClass

use*_*816 8 ng-class angular

可以说我在数组中有一些对象(我们称其为数组“ items”),{ title: "Title", value: true }并且我使用ngFor将它们显示为:

<h1 *ngFor="let item of items">{{ item.title }}</h1>

现在说我想根据item.value是true还是false在h1上显示一个类。我怎样才能做到这一点?

我无法添加[class.some-class]="{{ item.value }}"。基本上,如何将当前项目的true或false值转换为ngClass之类的值?我是否在Angular 2中缺少执行此操作的明显方法?

(顺便说一句,我知道我可以通过添加class="{{ item.value | pipe }}"到h1并传递值并基于值true和false返回正确的类来做到这一点,但是似乎应该有更好的方法。)

谢谢

Wir*_*rie 7

您可以添加这样的条件类:

<h1 *ngFor="let item of items" 
     [class.some-class]="item.value === true">
     {{ item.title }}
</h1>
Run Code Online (Sandbox Code Playgroud)

请记住,*ngFor语法实际上会扩展为template。在您的示例中,它将扩展为:

<template ngFor let-item [ngForOf]="items">
    <h1 [class.some-class]="item.value === true">
       {{ item.title }}
    </h1>       
</template>
Run Code Online (Sandbox Code Playgroud)

看到它展开后,您会看到为什么能够将[class.xyz]指令与模板输入变量一起使用item


Sha*_*har 5

将 ngClass 用于动态值(其中 dynamicValue 可以是组件内的 @Input()):

<div [ngClass]="[dynamicValue]"></div>
Run Code Online (Sandbox Code Playgroud)

也可用于多个值:

<div [ngClass]="[dynamicValue, secondDynamicValue, thirdDynamicValue]"></div>
Run Code Online (Sandbox Code Playgroud)

在某些情况下,您可能希望将动态值与条件类组合。这可以像这样完成:

<div [ngClass]="[dynamicValue, (isRounded ? 'rounded' : '')]"></div>
Run Code Online (Sandbox Code Playgroud)

这将应用动态值类名称,并且在 isRounded 为 true 的情况下还将有条件地应用“rounded”类。