下面是我的Angular组件:

@Component( {
    selector: 'input-extra-field',
    template: `
            <div class="form-group" [formGroup]="formGroup" >
                <switch [attr.title]="field.etiquette" 
                    [attr.value]="field.valeur" [(ngModel)]="field.valeur"
                    [formControl]="fieldControl" [attr.id]="name" [attr.disabled]="disabled">
                </switch>
                <error-messages [control]="name"></error-messages>
            </div>
    `
} )

这是我的班级:

export class SwitchExtraField extends ExtraField {
    @Input() field: ExtraFormField;
    @Input() entity: { fields: Object };
    @Input() formGroup: FormGroup;

    constructor( formDir: NgForm ) {
        super( null, null, formDir );
    }

    get disabled(): string {
        if ( this.field && !!this.field.saisissable && !this.field.saisissable )     {
            return 'disabled';
        }
        return null;
    }
}

这是我编译时得到的错误:

ERROR Error: No value accessor for form control with unspecified name attribute
  at _throwError (forms.es5.js:1918)
  at setUpControl (forms.es5.js:1828)
  at FormControlDirective.webpackJsonp.../../../forms/@angular/forms.es5.js.FormControlDirective.ngOnChanges (forms.es5.js:4617)

当我改变元素开关输入它工作,知道我使用相同的结构到其他组件,它工作得很好。


当前回答

我在运行单元测试时遇到了这个问题。为了解决这个问题,我在我的spec.ts文件中添加了MatSlideToggleModule的导入。

其他回答

在我的情况下,我有一个<TEXTAREA>标签从旧的html转换到angular。必须更改为<textarea>。

我通过在带有[(ngModel)]属性的元素中添加name="fieldName" ngDefaultControl属性来修正这个错误。

在我的例子中,错误是由于在模块中复制导入组件而触发的。

如果你试图将ngModel添加到非输入元素中,比如<option> HTML标签,也会出现这个错误。确保你只把ngModel添加到<input>标签。 在我的例子中,我已经添加了一个ngModel到<ion-select-option>而不是<ion-select>。

它看起来像“formControl”是Angular表单的保留名称,当我使用这个名称作为组件的输入时,我在实际的from控件中得到了意想不到的行为。如果你问我,我会说这是Angular的一个bug。只需将您的输入名称替换为“frmCtrl”或其他东西,它就会工作。