ngClass 在我的 Angular 项目中不起作用

ngClass not working in my Angular Project

我正在尝试制作一个带有验证的表单,我正在使用以下界面来定义 FieldError

export interface FieldError {
  errorAt: string;
  errorMessage: string;
}

在我的 component.html 中,我正在使用 [ngClass] 来检查 FieldError.errorAt === 'first_name' 我是否想使用 text-danger,如果不是,我想使用 text-muted .

好像跟

<div class="form-group text-left">
    <label [ngClass]="{'text-danger':FieldError.errorAt==='first_name','text-muted':FieldError.errorAt!=='first_name'}">First name*</label>
    <input type="text" class="form-control" [(ngModel)]='first_name'>
    <small class="text-danger"> First-Name is Required </small>
</div>

我知道我可以使用它,?: 的三级运算符,但即使那样也不起作用。

我的 ngOnInit 也有以下代码:

ngOnInit(): void {
    this.FieldError.errorAt = '';
    this.FieldError.errorMessage = '';
}

***注:***那些是bootstrap类.

使用接口时,它定义了变量的类型。

public formField: FieldError = {errorAt: '', errorMessage: ''};

然后就可以在ngClass中使用了

<div class="form-group text-left">
    <label [ngClass]="{'text-danger': formField.errorAt==='first_name','text-muted': formField.errorAt!=='first_name'}">First name*</label>
    <input type="text" class="form-control" [(ngModel)]='first_name'>
    <small class="text-danger"> First-Name is Required </small>
</div>

最好的办法是在模板上使用命名变量,然后使用模板变量检查验证。

https://angular.io/guide/form-validation#validating-input-in-template-driven-forms

<div class="form-group text-left">
    <label [ngClass]="{'text-danger': fname.invalid,'text-muted': fname.invalid}">First name*</label>
    <input type="text" class="form-control" [(ngModel)]='first_name' #fname="ngModel">
    <small class="text-danger"> First-Name is Required </small>
</div>

好的,所以除了最后一个小时,我还多加了一点时间。

所以 FieldError 是一个接口,这就是它没有初始化自身的原因,即它甚至不应该有值。

我需要像下面这样简单地使用组件级对象,而不是接口。

  FieldError = {
    errorAt: '',
    errorMessage: ''
  };

尝试使用如下所示的三元运算符

<i class="fa fa-lg fa-fw" [ngClass]="{
'fa-check-square text-primary': collection.includes(vendor.id),
'fa-window-close text-danger': !collection.includes(vendor.id)
}"></i>

表格 docs:

The CSS classes are updated as follows, depending on the type of the expression evaluation:

  • string - CSS 类 中列出的字符串(space 分隔)是 已添加,

  • Array - 添加声明为 Array 元素的 CSS 类,

  • 对象 - 键是 CSS 类,在表达式时添加 在值中给出的值为真值,否则它们是 已删除。

当我们使用一些像

[ngClass]="{'text-danger': fname.invalid,'text-muted': !fname.invalid}"

你正在使用 ngClass 作为“对象”(表达式结果(*)是一个对象),看到方式是 {'name class':condition,...}

如果你使用一些像

[ngClass]="fname.invalid?'text-danger':'text-muted'"

您将 ngClass 用作“字符串”(表达式结果 (*) 是一个字符串)-看到没有 { }-

(*) 双引号括起来的表达式