2016-11-08 7 views
20

Ich versuche, das disabled Attribut von einem formControl zu verwenden. Wenn ich es in der Vorlage setzen, funktioniert es:Reaktive Formen - deaktiviert Attribut

<md-input formControlName="id" placeholder="ID" [disabled]="true"></md-input> 

Aber der Browser warnt mich:

Es sieht aus wie Sie das disabled-Attribut mit einem reaktiven Form Direktive sind. Wenn Sie beim Einrichten dieses Steuerelements in der Komponentenklasse "deaktiviert" auf " " setzen, wird das deaktivierte Attribut tatsächlich im DOM für festgelegt. Wir empfehlen, diesen Ansatz zu verwenden, um Fehler nach Änderungen zu vermeiden.

Example: 
    form = new FormGroup({ 
    first: new FormControl({value: 'Nancy', disabled: true}, Validators.required), 
    last: new FormControl('Drew', Validators.required) 
    }); 

Also habe ich es in den FormControl, und aus der Vorlage gestrichen:

constructor(private itemsService: ItemsService) { 
    this._items = []; 
    this.myForm = new FormGroup({ 
     id: new FormControl({value: '', disabled: true}, Validators.required), 
     title: new FormControl(), 
     description: new FormControl() 
    }); 
    this.id = this.myForm.controls['id']; 
    this.title = this.myForm.controls['title']; 
    this.description = this.myForm.controls['description']; 
    this.id.patchValue(this._items.length); 
} 

Aber es funktioniert nicht (es ist nicht das Deaktivieren des Eingangs). Was ist das Problem?

+1

Dies scheint mit der aktuellen Version von Angular 2 gut zu funktionieren: http://plnkr.co/edit/CQQtkYC9D5EoH0sAlNCV ? p = Vorschau – silentsod

+0

Ich verwende das neueste eckige CLI-Projekt zum Testen – FacundoGFlores

+2

Sie verwenden @ eckig/Material, also, für ihre github Probleme: https://github.com/angular/material2/issues/1171 Es ist noch nicht unterstützt und sie sind in Alpha, so dass Sie nicht erwarten können, dass es Feature abgeschlossen ist. – silentsod

Antwort

10

Ich habe [attr.disabled] benutze Sein Ursache Ich mag diese Vorlage immer noch als programmgesteuertes enable()/disable(), da es IMO überlegen ist.

ändern

<md-input formControlName="id" placeholder="ID" [disabled]="true"></md-input>

zu

<md-input formControlName="id" placeholder="ID" [attr.disabled]="true"></md-input>

Wenn Sie auf neueren Materialwechsel md-Eingang mat-input sind.

+0

Es funktioniert, danke! Aber ich verstehe nicht, warum ich "attr.disabled" (nicht nur "disabled") verwenden soll? –

+0

Dies funktioniert auch für Telerik Kendo für eckige Komponenten. Einige von ihnen haben '[disabled]' Eigenschaft und wenn ich es benutze, habe ich die gleiche Kompilierungswarnung bekommen. Ich habe '[disabled] 'in' [attr.disabled] 'geändert und es wird in die' .disabled' Eigenschaft der Komponente propagiert. –

+1

Nur zu beachten, mit [attr.disabled] können Sie es nicht auf zwei Arten binden. Es funktioniert nur einmal. Mit '[disabled]' und die Warnung in der Konsole funktioniert. Ich benutze Angular 4.1.3 –

0

Add Name Attribut zu Ihrem MD-Eingang. Wenn es das Problem nicht löst, bitte posten Sie Ihre Vorlage

0

Verwenden [attr.disabled] statt [disabled], es in meinem Fall funktioniert ok