gpt4 book ai didi

angular - 从 react 形式驱动 Material 日期选择器控制

转载 作者:行者123 更新时间:2023-12-02 21:24:14 25 4
gpt4 key购买 nike

我有日期选择器,它应该通过复选框切换单击动态禁用和启用。所有组件均来自库 Angular Material 6。并且由于我对表单处理程序使用响应式(Reactive)方法,因此我不能简单地使用 [disable] 指令。我收到进一步的错误:

It looks like you're using the disabled attribute with a reactive form directive. If you set disabled to true
when you set up this control in your component class, the disabled attribute will actually be set in the DOM for
you. We recommend using this approach to avoid 'changed after checked' errors.

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

我有想法直接在 TS 中替换 FormGroup 中的 FormContol ,如下所示:

toggleDatePicker() {
this.isDateRange = !this.isDateRange;
this.form.removeControl('to');
if (this.isDateRange) {
this.form.addControl('to', new FormControl({value: new Date(), disabled: false}))
} else {
this.form.addControl('to', new FormControl({value: null, disabled: true}))
}
}

这适用于 input 标记,但 mat-datepicker-toggle 仍保持初始状态。 mat-datepicker-toggle 状态不依赖于 FormControl

<mat-form-field>
<input
matInput
[matDatepicker]="to"
formControlName="to"
[disabled]="isDateRange"
>
<mat-datepicker-toggle matSuffix [for]="to"></mat-datepicker-toggle> // THIS IS NO CHANGE(
<mat-datepicker #to></mat-datepicker>
</mat-form-field>

独立于我的 FormControl 操作 mat-datepicker-toggle 始终处于相同状态:

关闭 enter image description hereenter image description here

如何操作 mat-datepicker-toggle 思想 FromControl

最佳答案

控件上有 disable()enable() 方法,您需要使用它们以编程方式切换控件禁用状态。

请查看此 stackblitz 示例

https://stackblitz.com/edit/angular-lenyzk?embed=1&file=app/datepicker-overview-example.ts

HTML 模板

<form [formGroup]="form">
<mat-checkbox (click)="toggleCtrState()">Toggle Control State</mat-checkbox>
<mat-form-field>
<input
matInput
[matDatepicker]="to"
formControlName="to"
>
<mat-datepicker-toggle matSuffix [for]="to"></mat-datepicker-toggle>
<mat-datepicker #to></mat-datepicker>
</mat-form-field>
</form>

组件

import { Component } from '@angular/core';
import { FormControl, FormGroup, FormBuilder, Validators } from '@angular/forms';

/** @title Basic datepicker */
@Component({
selector: 'datepicker-overview-example',
templateUrl: 'datepicker-overview-example.html',
styleUrls: ['datepicker-overview-example.css'],
})
export class DatepickerOverviewExample {

form = new FormGroup({
to: new FormControl('', Validators.required),
});

toggleCtrState() {
const ctrl = this.form.get('to');
if (ctrl.disabled) {
ctrl.enable();
} else {
ctrl.disable();
}
}
}

关于angular - 从 react 形式驱动 Material 日期选择器控制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53492816/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com