没有名称控件为“ recipient”的表单控件的值访问器


68

升级到Angular 2 Rc.5后出现此错误。这是我的组件模板:

<md-input
    [(ngModel)]="recipient"
    name="recipient"
    placeholder="Name"
    class="col-sm-4"
    (blur)="addRecipient(recipient)">
</md-input>

我的app.module.ts导入了 FormsModule

我也尝试private recipient;在组件中声明。

我想念什么吗?为什么会出现此错误?

No value accessor for form control with name: 'recipient'

Answers:


135

您应该像这样将ngDefaultControl属性添加到您的输入中:

<md-input
    [(ngModel)]="recipient"
    name="recipient"
    placeholder="Name"
    class="col-sm-4"
    (blur)="addRecipient(recipient)"
    ngDefaultControl>
</md-input>

摘自这篇文章中的评论:

angular2 rc.5自定义输入,无值访问器,用于具有未指定名称的表单控制

注意:对于@ angular / material的更高版本:

现在,您应该改写:

<md-input-container>
    <input
        mdInput
        [(ngModel)]="recipient"
        name="recipient"
        placeholder="Name"
        (blur)="addRecipient(recipient)">
</md-input-container>

参见https://material.angular.io/components/input/overview


3
它对我有用,但是有人可以向我解释为什么我们必须添加“ ngDefaultControl”吗?
jpmottin

那是因为md-input并不是ngModel的已知标签,但是对于@ angular / material的最新版本,您应该使用带有mdInput作为属性的输入标签,而不是包装在md-input-container元素中。参见material.angular.io/components/input/overview
Peter Salomonsen

14

确保还导入了MaterialModule,因为您正在使用不属于FormsModule的md-input


应该安装哪个npm软件包来获取MaterialModule?
彼得·萨洛蒙森

我认为这是@ angular2-material / core
Ophir Bushinsky

@ angular2-material / core中没有MaterialModule
Peter Salomonsen

好的,我检查了它,您需要做:npm install @ angular2-material / core --save和npm install @ angular2-material / input --save,然后从@ angular2-material / input导入MdInputModule
Ophir Bushinsky

我已经导入了MdInputModule,但是当我将[[ngModel)]添加到我的md输入中时,我得到的错误消息与问题相同:“表单控件无值访问器”。您是否已使用ngModel测试过?(这就是问题所在)。
彼得·萨洛蒙森
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.