当前位置: 首页 > 知识库问答 >
问题:

Angular2中的ng类

唐高朗
2023-03-14

我正在用angular 2开发一个测试应用程序,我遇到了一个基于模型列表添加类的问题。

在角度1中,我们可以:

// model
$scope.myClasses = ['class1', 'class2', ...];

// view
... ng-class="myClasses" ...

在 Angular 2 中,到目前为止我所能做的就是:

// view
... [class.class1]="true" [class.class2]="true" ...

这显然不是很有活力,我相信一定有更好的方法来做到这一点。

但是,我也尝试过:

// model
class ... {
    private myClasses: any;
    constructor() {
        this.myClasses = ['class1', 'class2', ...];
    }

// view
... [class]="myClasses" ...

但这不起作用,我已经尝试将< code>myClasses作为单个类的字符串名称、字符串数组、具有classname键的对象以及作为值的true,这种类型的对象数组,但遗憾的是,所列出的都不能这样工作。

共有3个答案

鲍鸿波
2023-03-14

另一种方法 [ 使用三元运算符和插值]

(尽管< code>Mark Rajcok陈述了所有可能的< code>ngClass方法,但是您可以将它与< code >三元运算符耦合,并得到< code>else条件)

<div class="hard-coded-class {{classCondition ? 'c1 c2': 'c3 c4'}}">
    Conditional classes using <b>Ternary Operator</b>
</div>

或者将三元运算符ngClass一起使用,查看如何

export class App {
  this.classCondition = false;
}
<div class="hard-coded-class c3 c4">
      Conditional classes using <b>Ternary Operator</b>
</div>

希望它能帮助某人。

蒙勇
2023-03-14

您必须在<code>@View</code>decorator的<code>指令</code>属性中指定<code>CSSClass</code>。看看这个笨蛋。

@Component({
    selector: 'app',
})
@View({
    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)
    }
}

更新

在alpha-35中,< code>CSSClass被重命名为< code>NgClass。看到这扑通一声了吗

@Component({
  selector: 'app',
})
@View({
  directives: [NgClass],
  template: `
    <div [ng-class]="classMap">Class Map</div>
  `,
})
class App { /* ... */ }
鄂伟兆
2023-03-14

根据NgClass API文档,Angular 2将接受字符串、数组或Object/map作为NgClass的表达式。当然,也可以指定一个返回其中一个的函数。

import {Component, CORE_DIRECTIVES} from 'angular2/angular2'

@Component({
  selector: 'my-app',
  directives: [CORE_DIRECTIVES],
  template: `
    <div>
      <h2>{{title}}</h2>
      <div ngClass="gray-border purple">string of classes</div>
      <div [ngClass]="'gray-border purple'">string of classes</div>
      <div [ngClass]="['gray-border', 'green']">array of classes</div>
      <div [ngClass]="{'gray-border': true, 'blue': true}">object/map of classes</div>
      <button [ngClass]="{active: isActive}" (click)="isActive = !isActive">Click me</button>
    </div>
  `,
  styles: [`
    .gray-border {  border: 1px solid gray; }
    .blue   { color: blue; }
    .green  { color: green; }
    .purple { color: purple; }
    .active { background-color: #f55; }
  `]
})
export class App {
  title = "Angular 2 - NgClass";
  isActive = false;
}

扑通一声

如果您传递的是文字字符串,请注意两种可选的语法:

<div ngClass="gray-border purple">string of classes</div>
<div [ngClass]="'gray-border purple'">string of classes</div>

我认为第一个只是第二个的语法糖。

引用文件:

虽然Ngclass指令可以解释计算为字符串、数组或对象的表达式,但基于对象的版本是最常用的,并且具有将所有CSS类名保留在模板中的优势。

 类似资料:
  • 本文向大家介绍Angular2中Bootstrap界面库ng-bootstrap详解,包括了Angular2中Bootstrap界面库ng-bootstrap详解的使用技巧和注意事项,需要的朋友参考一下 准备 Angular 2 环境 ng-bootstrap 是基于 Angular 2 的, 因此需要先准备 Angular 2 的环境。 使用 ng-bootstrap 下载 ng-bootstr

  • 我想检查实际元素是否有值。 例如,我想检查巧克力是黑色还是白色。根据这个,我想显示正确的文本。 如何修复代码,使其正常工作?

  • 问题内容: 更新后,我已将角度包版本从2.4.10更新到4.0.0,导航时出现以下错误。 而且我更改了webpack.common.js配置。见下面的代码 问题答案: 我已经解决了这个问题。我添加了一个新包:。 我导入了模块:

  • 问题内容: 如果我的措词不正确,我事先表示歉意。我在的内部有一个文本框,当我尝试获取文本框值时始终为。我只希望它显示我在相应文本框中键入的内容。 似乎是一个问题,那么我该如何创建全局或控制器根级别以便可以访问它? 这是帮助解决问题的JSFiddle:http : //jsfiddle.net/stevenng/9mx9B/14/ 问题答案: 在您的点击表达式中,您可以引用并在您的函数中对其进行访问

  • 问题内容: 我正在使用angular2和gulp开发一个节点应用程序。我编写了一个组件文件login.ts,如下所示: 我的bootstrap.ts文件是: 但是当我编译这些文件时,出现以下错误: 这是我的tsconfig.json: 我已经使用以下命令安装了angular2的类型: 请帮助纠正错误。 问题答案: @simon错误说的是输入错误。但是对于其他进口商品,我已经发布了此答案,可能对其他

  • 问题内容: 我正在尝试使用ng-repeat生成表单输入。注意:’customFields’是字段名称的数组:[“ Age”,“ Weight”,“ Ethnicity”]。 设置“ ng-model”的最佳/正确方法是什么?我想将它作为 person.customfields.’fieldname’ 发送到服务器,其中fieldname来自’customFields中的field’。 问题答案: