【发布时间】:2018-04-30 16:37:16
【问题描述】:
我正在使用 Angular Material 2 的 mat-datepicker 并希望禁用输入元素,以便用户无法使用文本输入编辑值。
detailed instructions in the Angular Material 2 docs 介绍了如何禁用 mat-datepicker 的不同部分,但是,这些似乎没有涵盖如何禁用作为响应式表单的一部分的文本输入。
Angular Material 文档建议您通过以下方式禁用文本输入:
<mat-form-field>
// Add the disabled attribute to the input element ======
<input disabled
matInput
[matDatepicker]="dateJoined"
placeholder="Date joined"
formControlName="dateJoined">
<mat-datepicker-toggle matSuffix [for]="dateJoined"></mat-datepicker-toggle>
// Add [disabled]=false to the mat-datepicker =======
<mat-datepicker [disabled]="false"
startView="year"
#dateJoined></mat-datepicker>
</mat-form-field>
但是,如果您的日期选择器是响应式表单的一部分,则文本元素将保持活动状态,并且您会从 Angular 收到以下消息:
您似乎正在使用带有反应形式的 disabled 属性 指示。如果在设置此控件时将 disabled 设置为 true 您的组件类, disabled 属性实际上将设置在 给你的 DOM。我们建议使用这种方法来避免“更改 检查后的错误。 例子: form = new FormGroup({ first: new FormControl({value: 'Nancy', disabled: true})});
我更新了组件中的FormGroup 以禁用FormControl,这具有禁用输入的预期效果,但是,如果您随后使用this.form.value 禁用的表单控件获取FormGroup 的值已经不存在了。
是否有解决此问题的方法,它不涉及使用 ngModel 仅针对 mat-datepicker(s) 使用单独的模板驱动表单?
编辑: 在帖子标题中添加了“只读”以澄清这不是禁用控件 - 因为我要问的是使输入元素只读,但不是禁用自我控制
【问题讨论】:
标签: angular angular-material2 angular-reactive-forms