【问题标题】:Angular2 Forms - ngControlAngular2 表单 - ngControl
【发布时间】:2016-07-27 01:40:38
【问题描述】:

我正在尝试使用 ngControl 根据用户输入应用错误类。

不知何故,我无法让它工作。我看到设置了适当的类(行 ng-invalid),但是当尝试使用 name.valid(其中 name 是我的 ngControl)时它不起作用。

html:

   <div ngClass="{alert: name.invalid}">
      <label for="name">Name</label>
      <input ngControl="name" #name id="name" [(ngModel)]="user.name"/>
   </div> 

</div>

js

export class App {
   userForm: any;
   user: any;

   constructor(
     private _formBuilder: FormBuilder) {

     this.user = {name: 'Ben'};
     this.userForm = this._formBuilder.group({
        'name': ['', Validators.required]
     });
   }

}

我在 angular.io 示例中看到他们确实像这样使用它(仅针对其他情况,例如 show/hide divs)?

这是简单的插件:http://plnkr.co/edit/BKx4yplIOu44tk7Mfolc?p=preview

当输入字段为空时,我希望上层div 获得alert 类,但这不会发生。

【问题讨论】:

  • 请在问题本身中插入简化的代码示例。

标签: forms angular


【解决方案1】:

实际上,您的模板需要更改三件事:

  • ngClass 应该是 [ngClass]。否则,该值将被视为字符串而不是表达式。
  • #name 应该是 #name="ngForm"。否则,您将引用 DOM 元素而不是控件。
  • Angular2 中的控件上没有 invalid 属性,而只有一个 valid

这是重构后的代码:

<div [ngClass]="{alert: !name.valid}">
  <label for="name">Name</label>
  <input ngControl="name" #name="ngForm"
      required id="name" [(ngModel)]="user.name"/>
</div>

这里是 plunkr:http://plnkr.co/edit/OJfb9VDqlrRH4oHXQJyg?p=preview

请注意,您不能将FormBuilderngControl 结合使用,因为后者允许您定义内联表单。对于FormBuilder,您必须改用ngFormControl

这是一个示例:

<div [ngClass]="{alert: !userForm.controls.name.valid}">
  <label for="name">Name</label>
  <input [ngFormControl]="userForm.controls.name"
      id="name" [(ngModel)]="user.name"/>
</div>

查看这篇文章了解更多详情:

【讨论】:

  • 非常感谢。我尝试了很多组合,最后我犯了一些错字。但是你把一些事情说清楚了,我看到它现在正在工作。我只有一个问题。我在控制台中看到抛出了这个异常:Uncaught (in promise): EXCEPTION: Expression '{alert: !name.valid} in App@4:7' has changed after it was checked. 我在我的应用程序中看到了它,这就是为什么我从所有更改和解决方法开始,最后在这里结束。你有什么想法,应该如何修复(在我的应用程序中,它发生在 name.valid 和 name.touched 的组合中)。
  • 不客气!我认为您可以尝试在组件的ngOnInit 方法中调用ChangeDetectorRefdetectChanges 方法。看到这个问题:stackoverflow.com/questions/35520018/…
猜你喜欢
  • 2016-05-24
  • 2016-06-09
  • 2016-07-16
  • 1970-01-01
  • 2023-03-26
  • 2017-10-11
  • 2021-01-12
  • 2017-07-09
相关资源
最近更新 更多