ERROR Fehler: Kein Wertzugriffsfaktor für Formularsteuerelement mit nicht spezifiziertem Namensattribut auf Schalter

Hier ist meine Komponente in Angular 4:

@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>
    `
} )

Hier ist meine Klasse:

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;
    }
}

Dies ist die Fehlermeldung, die ich beim Kompilieren erhalte:

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)

Wenn ich das Element Schalter auf Eingabe ändern es funktioniert, zu wissen, dass ich die gleiche Struktur zu anderen Komponenten und es funktioniert gut.

Lösung

Ich habe diesen Fehler behoben, indem ich die Attribute name="fieldName" ngDefaultControl zu dem Element hinzugefügt habe, das das Attribut [(ngModel)] trägt.

Kommentare (2)

Ich hatte das gleiche Problem, und das Problem war, dass meine untergeordnete Komponente ein "@input" namens "formControl" hatte.

Also brauchte ich nur von zu ändern:

zu:

ts:

@Input()
control:FormControl;
Kommentare (3)

Das ist zwar etwas blöd, aber ich habe diese Fehlermeldung bekommen, weil ich versehentlich [formControl] statt [formGroup] verwendet habe. Siehe hier:

WRONG

@Component({
  selector: 'app-application-purpose',
  template: `
    <div [formControl]="formGroup">
      <input formControlName="formGroupProperty" />
    </div>
  `
})
export class MyComponent implements OnInit {
  formGroup: FormGroup

  constructor(
    private formBuilder: FormBuilder
  ) { }

  ngOnInit() {
    this.formGroup = this.formBuilder.group({
      formGroupProperty: ''
    })
  }
}

RICHTIG

@Component({
  selector: 'app-application-purpose',
  template: `
    <div [formGroup]="formGroup">
      <input formControlName="formGroupProperty" />
    </div>
  `
})
export class MyComponent implements OnInit {
  formGroup: FormGroup

  constructor(
    private formBuilder: FormBuilder
  ) { }

  ngOnInit() {
    this.formGroup = this.formBuilder.group({
      formGroupProperty: ''
    })
  }
}
Kommentare (0)