如何使用角度反应形式使禁用输入也需要?

时间:2019-05-22 12:53:08

标签: angular angular-reactive-forms angular-forms angular-validator

我有一个输入,当用户单击对话框时将填充该输入。因此,为此我必须将其禁用,因为我不希望用户手动输入该值。 唯一的问题是必须输入此信息,而到目前为止我还做不到。

我尝试在输入中添加'required'指令,还尝试在表单创建时添加Validator.required,但是这些都不是表单所需的字段。

createUnityForm(): FormGroup {
    return this._formBuilder.group({
        id      : [this.unity.id],
        description: [this.unity.description],
        floor: [{value: this.unity.floor, disabled: true}, Validators.required]
    });
}

<mat-form-field appearance="outline" floatLabel="always" class="mr-16" fxFlex>
    <mat-label>{{'UNITY.FLOOR' | translate}}</mat-label>
    <input matInput placeholder="{{'UNITY.SELECT-FLOOR' | translate}}"
        name="floor"
        formControlName="floor"
        required>
</mat-form-field>

<button *ngIf="action === 'edit'"
    mat-button
    class="save-button"
    (click)="matDialogRef.close(['save',unityForm])"
    [disabled]="unityForm.invalid"
    aria-label="save">
        {{'GENERAL.SAVE' | translate}}
</button>

unityForm有效,即使输入中没有任何内容

3 个答案:

答案 0 :(得分:0)

如果将Started POST "/sections/51/comments" for ::1 at 2019-05-24 23:29:06 +0000 Processing by CommentsController#create as JS Parameters: {"utf8"=>"✓", "authenticity_token"=>[...], "comment"=>{"body"=>"asdas"}, "commit"=>"Save comment", "section_id"=>"51"} Section Load (0.5ms) SELECT "sections".* FROM "sections" WHERE "sections"."id" = ? LIMIT ? [["id", 51], ["LIMIT", 1]] comment Load (0.4ms) SELECT "comments".* FROM "comments" WHERE "comments"."section_id" = ? LIMIT ? [["section_id", 51], ["LIMIT", 1]] Completed 500 Internal Server Error in 11ms (ActiveRecord: 0.9ms) NoMethodError (undefined method `create' for nil:NilClass): app/controllers/comments_controller.rb:4:in `create' 设置为FormControl,则其验证器将被忽略。

更多信息:https://angular.io/api/forms/AbstractControl#disabled

答案 1 :(得分:0)

尝试使用readonly代替disabled

答案 2 :(得分:0)

Radoslaw拥有它。在HTML 中尝试使用只读 ,而不是在模型中禁用 。这提供了与禁用模型中的控件类似的UI,但是验证仍然有效。这可能很有用(例如,从其他地方提取记录以提交到另一个数据库,不允许任何用户更改,而仅在原始数据有效的情况下才提交)