ng-class在Angular2中
ng-class在Angular2中
我正在开发一个基于Angular 2的测试应用程序,我在根据模型的列表添加类的问题上遇到了困难。
在Angular 1中,可以这样做:
// 模型
$scope.myClasses = ['class1', 'class2', ...];
// 视图
... ng-class="myClasses" ...
在Angular 2中,到目前为止我只能做到:
// 视图
... [class.class1]="true" [class.class2]="true" ...
这显然不够灵活,我相信肯定有更好的方法来实现这个。
然而,我也尝试过:
// 模型
class ... {
private myClasses: any;
constructor() {
this.myClasses = ['class1', 'class2', ...];
}
// 视图
... [class]="myClasses" ...
但是这样不起作用,我尝试过将myClasses作为单个类的字符串名称,字符串数组,具有类名键和true值的对象,以及这种类型的对象数组,但可惜的是,没有一种方法可以按照这种方式工作。
在Angular2中,如果要使用ng-class
指令,需要在组件的directives
属性中指定CSSClass
。下面是一段示例代码:
({ selector: 'app', }) ({ template: '<div [class]="classMap">Class Map</div>', directives: [CSSClass] }) class App { constructor() { this.classMap = { 'class1': true, 'class2': false }; setInterval(() => { this.classMap.class2 = !this.classMap.class2; }, 1000) } }
在上述代码中,CSSClass
指令没有在directives
属性中指定,导致ng-class
指令无法正常使用。为了解决这个问题,需要将CSSClass
添加到directives
属性中,如下所示:
({ selector: 'app', }) ({ directives: [CSSClass], template: ` <div [ng-class]="classMap">Class Map</div> `, }) class App { /* ... */ }
另外,从UPD可以看出,CSSClass
指令已经改名为NgClass
。此外,ng-class
指令也被改为ngClass
。在最新的beta.3版本中,可以直接使用[class]
来实现相同的功能,而不需要指定指令。
总结起来,ng-class
指令在Angular2中无法正常工作的原因是没有在directives
属性中指定CSSClass
指令。解决方法是将CSSClass
或NgClass
添加到directives
属性中。另外,ng-class
指令也可以改为ngClass
或直接使用[class]
来实现相同的功能。
在Angular2中,`ng-class`指令已经被废弃,因此无法在Angular2中直接使用。然而,可以使用其他方法来实现类似的效果。
一种解决方法是使用三元运算符和插值。在模板中,可以使用三元运算符将类条件设置为不同的类。例如:
Conditional classes using Ternary Operator
在组件的TS文件中,可以设置类条件为`true`或`false`:
export class App { this.classCondition = false; }
最终渲染的结果为:
Conditional classes using Ternary Operator
希望这个解决方法能对其他人有所帮助。长时间以来,我一直在寻找和希望有这样的解决方案!
Angular 2中的ng-class问题是由于NgClass指令的使用方式引起的。根据NgClass的API文档,Angular 2可以接受一个字符串、一个数组或一个对象/映射作为NgClass的表达式,当然也可以指定一个返回其中之一的函数。
如果传递的是一个字面字符串,有两种可选的语法:
string of classesstring of classes
我认为第一种语法只是第二种语法的一种语法糖。
引用文档的话:
虽然NgClass指令可以解析计算结果为字符串、数组或对象的表达式,但基于对象的版本是最常用的,并且有一个优点,即可以将所有的CSS类名都保留在模板中。
解决方法:
根据NgClass的API文档,我们可以使用字符串、数组或对象/映射作为ngClass的表达式。如果传递的是一个字面字符串,可以使用`ngClass="..."`或`[ngClass]="'...'"`的语法。如果传递的是一个数组,可以使用`[ngClass]="['...', '...']"`的语法。如果传递的是一个对象/映射,可以使用`[ngClass]="{'...': true, '...': true}"`的语法。
在上面的代码示例中,我们可以看到这些不同的用法。例如,`ngClass="gray-border purple"`和`[ngClass]="'gray-border purple'"`都是表示传递一个字符串的方式。`[ngClass]="['gray-border', 'green']"`表示传递一个数组。`[ngClass]="{'gray-border': true, 'blue': true}"`表示传递一个对象/映射。
除了传递字符串、数组或对象/映射外,我们还可以使用一个返回这些类型之一的函数作为ngClass的表达式。
总之,ngClass在Angular 2中的使用方式有多种选择,可以根据不同的需求选择合适的方式来使用。