【问题标题】:How to perform form validation in Angular 2如何在 Angular 2 中执行表单验证
【发布时间】:2016-05-13 18:05:29
【问题描述】:

我目前使用的是 Angular 2 的 2.0.0-rc.1 版本,我正在尝试创建一些基本的表单验证,但我已经好几天没有进行此操作了,因为我无法克服这个错误:

No provider for ControlContainer

我在 Github 上查看了 this open issue,但几乎没有给出为什么会发生这种情况或如何解决它的信息。似乎从第一个测试版开始就存在这种情况。

我已经尝试导入和注入大多数与表单相关的内容(FORM_PROVIDERSFORM_DIRECTIVES 随便你),但我最近的尝试是这样的:

import {NgForm, ControlContainer} from '@angular/common';

@Component({
  selector: 'form-input',
  templateUrl: 'alonglongtemplateurl.html',
  styleUrls: ['alonglongstyleurl.css'],
  directives: [
    NgForm
  ],
  providers: [
    ControlContainer
  ]
})

模板:

<div>
  <input ngControl="name">
</div>

然后我这样使用它:

<form #myForm="ngForm">
  <form-input></form-input>
</form>

尽管我注入了它要求的内容,但我仍然得到同样的错误。

自最新版本以来,在 Angular 2 中使用表单元素验证的正确方法是什么?

【问题讨论】:

标签: validation angular


【解决方案1】:

我认为您需要在输入周围有一个表单元素才能使用ngControl

<div>
  <form>
    <input ngControl="name">
  </form>
</div>

form 指令是平台指令的一部分,因此您无需明确包含它们。提供者也一样。

【讨论】:

  • 我愿意,但在组件之外。
  • 我认为这就是问题所在。
  • 也许你可以利用 ng-include。请参阅本文(“字段的表单组件”部分):restlet.com/blog/2016/02/17/…。这样您的输入将成为表单的一部分...
  • 太棒了!谢谢!要使您的表单输入成为高级表单的一部分,您需要使相应的组件实现一个值访问器。这样您就可以直接在其上使用ngControl。类似的东西:&lt;form-input ngForm="name"&gt;&lt;/form-input&gt;。您的问题是您使用模板驱动的方法来定义验证。因此,您无法将子组件中的 ngControl 与外部表单链接。也就是说,我认为如果您使用 FormBuilder 类是可能的,但这是定义验证的另一种方法;-)
  • 你能提供一个 plunkr 或其他显示有效验证的东西吗?因为没有组件我什至无法让它工作......
猜你喜欢
  • 2019-03-12
  • 1970-01-01
  • 2018-03-10
  • 2016-11-28
  • 1970-01-01
  • 2019-02-08
  • 2016-04-06
  • 2016-04-09
  • 2017-04-08
相关资源
最近更新 更多