javascript - Angular2/4 无法将输入字段绑定(bind)到 ngControl - 无法读取未定义的属性 'errors'

标签 javascript angular customvalidator

我有一个自定义验证器来检查输入字段中的空格,但我无法理解为什么输入字段对构造函数未定义。

自定义验证组件:

import {Component} from '@angular/core';
import {FormControl, FormGroup, FormBuilder} from '@angular/forms';
import {UsernameValidators} from './usernameValidators';

@Component({
  selector: 'custom-validation',
  template: `
    <div [formGroup]="usernameGroup">
      <input type="text" placeholder="Name" formControlName="username">
      <div *ngIf="username.errors.cannotContainSpace"> Without spaces! </div>
    </div>
  `
})

export class CustomValidationFormComponent {

  usernameGroup: FormGroup;

  constructor(fb: FormBuilder){
    this.usernameGroup = fb.group({
      username: ['', UsernameValidators.cannotContainSpace],
    });
  }

用户名验证器:

import {FormControl} from '@angular/forms';

export class UsernameValidators {
  static cannotContainSpace(control: FormControl){
    if (control.value.indexOf(' ') >= 0) 
      return { cannotContainSpace: true };

        return null;
  }
}

PLUNKER

最佳答案

您的用户名 formControl 不是可以直接访问的类变量。您可以通过 FormGroup 访问它,即 userNameGroup

  <div *ngIf="usernameGroup.controls['username'].errors?.cannotContainSpace">

或者正如 Manuel Zametter 提到的:

  <div *ngIf="usernameGroup.controls.username.errors?.cannotContainSpace">

?. 是安全导航运算符,如果它是 undefinednull,它会检查错误。

Plunker

关于javascript - Angular2/4 无法将输入字段绑定(bind)到 ngControl - 无法读取未定义的属性 'errors',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44629542/

相关文章:

javascript - 单击时如何更改表行颜色并在单击另一行时恢复为原来的颜色?

javascript - 出现在一个元素之后的所有元素的选择器

javascript - 如何在 DNN 客户端资源管理中使用异步(非阻塞)javascript

Angular:使用新的 http 客户端映射 HTTP 响应

javascript - CustomValidator 在 asp.net 中无法正常工作

ruby-on-rails - 导致错误的自定义验证

asp.net-mvc - 修剪除具有 NoTrim 属性的输入字段之外的所有输入字段

javascript - 范围何时在 angularjs 生命周期中自然被销毁

Angular2 无法在 promise 中访问 'this'

angular - 如何找到哪些组件存在冲突?