Angular2 Material2-如何在表单重建中禁用/启用mat-datepicker-toggle

sboggs11

Angular版本5.2.4,Material2 5.2.4

我正在使用元素的这种组合:

  • 垫形场
  • 使用matinput指令输入
  • 垫日期选择器
  • 垫日期选择器切换

...以当数据源更改时重建的形式。

我能够在初始表单构建中将输入和mat-datepicker-toggle设置为禁用或启用。重建表单时,可以设置输入的disabled属性。但是,对于在初始表单构建之后进行的任何表单重新构建,mat-datepicker-toggle的disable属性都将保持初始状态(无论是启用还是禁用)。

材料文档说明(我在此处在元素周围使用引号):

与任何标准“输入元素”一样,可以通过添加disabled属性来禁用日期选择器输入。默认情况下,“ mat-datepicker”和“ mat-datepicker-toggle”将从“ input element”继承其禁用状态

因此,重建表单,设置mat-datepicker-toggle的禁用/启用状态是我要解决的问题。

我简化了下面的工作代码,以显示我最近尝试过的代码。让我知道您是否需要更多信息。

app.module.ts

import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';

import { AppComponent } from './app.component';
import { MatDatepickerModule, MatIconModule,
  MatInputModule, MatNativeDateModule,} from '@angular/material';

@NgModule({
  exports: [ MatDatepickerModule, MatIconModule,
    MatInputModule, MatNativeDateModule ]
})
export class MaterialModule { }

@NgModule({
  imports:      [ BrowserModule, FormsModule, ReactiveFormsModule, 
MaterialModule ],
  declarations: [ AppComponent ],
  bootstrap:    [ AppComponent ],
})
export class AppModule { }

app.component.ts

import { Component } from '@angular/core';
import { FormGroup, FormControl } from '@angular/forms';
import { VERSION } from '@angular/material';

@Component({
  selector: 'material-app',
  templateUrl: 'app.component.html'
})
export class AppComponent {
  formGroup: FormGroup;
  version = VERSION;
  disableMe = false;
  infamousDate = "2018-08-22T12:34:56.789Z";

  constructor() { }

  ngOnInit() {
    this.rebuildForm();
  }
  rebuildForm() {
    this.disableMe = !this.disableMe;
    this.formGroup = new FormGroup({
      dateJoined: new FormControl(
        { disabled: this.disableMe, value: this.infamousDate })
    });
  }
}

app.component.html

<form class="basic-container" [formGroup]="formGroup">
  <mat-form-field>
    <input matInput [matDatepicker]="dateJoined" placeholder="Date joined" formControlName="dateJoined">
    <mat-datepicker #dateJoined></mat-datepicker>
    <mat-datepicker-toggle matSuffix [for]="dateJoined"></mat-datepicker-toggle>
  </mat-form-field>
</form>
<button (click)="rebuildForm()">click me</button><hr><span>date enabled: {{!disableMe}}</span>

这是Stackblitz中的相同代码

G.特兰特

您需要将mat-datepicker-toggle的禁用输入绑定到表单控件的disabled属性:

<mat-datepicker-toggle matSuffix [for]="dateJoined"
    [disabled]="formGroup.controls['dateJoined'].disabled">
</mat-datepicker-toggle>

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章