【问题标题】:mat-datepicker inside *ngFor*ngFor 内的 mat-datepicker
【发布时间】:2018-03-23 14:15:34
【问题描述】:

*ngFor 中使用mat-datepicker 时会遇到此问题。

mat-datepicker 需要模板引用变量#test 才能绑定到input
一般来说,在*ngFor 中使用时,是否有直接的方法来获取引用变量?我找不到办法。

没有*ngFor的简单工作示例

<mat-form-field>
  <input matInput [matDatepicker]="test" placeholder="Enter Date" [(ngModel)]="someDate" name="someDate">
  <mat-datepicker-toggle matSuffix [for]="test"></mat-datepicker-toggle>
  <mat-datepicker #test></mat-datepicker>
</mat-form-field>

但是由于模板reference variables对于整个模板必须是唯一的,所以当上面的块在*ngFor中重复时,你不能直接使用mat-datepickertest不会是唯一的。

任何指针都会有所帮助。

【问题讨论】:

  • 为什么要进行这个#test?也许我们可以用不同的方式实现你想做的事情
  • @Powkachu 你能分享一个例子吗?

标签: angular datepicker angular-material angular-forms


【解决方案1】:

我想指出,如果您想给它一个更有意义的名称,可以使用下划线“_”作为分隔符。

这是一个具有双向模型绑定的工作示例。

<div *ngFor="let patient of patients; let i = index;">
  <input matInput [matDatepicker]="patientDueDate_i" placeholder="Due date" 
    [(ngModel)]="patient.dueDate">
   <mat-datepicker-toggle matSuffix [for]="patientDueDate_i"></mat-datepicker-toggle>
   <mat-datepicker #patientDueDate_i></mat-datepicker>   
</div>

【讨论】:

    【解决方案2】:

    您可以将索引变量添加到您的 ngFor 并将该索引的值分配为您的日期选择器的标识符。您还可以在组件内创建一个公共值数组,其含义类似于 ["dtPickerOne", "dtPickerTwo"] 并将它们用作值。

    <div *ngFor="let t of test; let i = index;">
             <input matInput [matDatepicker]="i" placeholder="Choose a date" [attr.id]="dtPicker + i"
             [formControl]="dateFrom">
             <mat-datepicker-toggle matSuffix [for]="i"></mat-datepicker-toggle>
             <mat-datepicker #i></mat-datepicker>   
        </div>
    

    【讨论】:

    • 这似乎可行,但如果您尝试在模板中的其他位置使用i,则会导致奇怪的行为,例如在字符串插值中,您不会得到1 or 2 or 3,而是得到@ 987654325@。为此,我不得不使用另一个let j=index。如果有更好的方法在*ngFor 内的模板驱动表单中使用引用变量,那将会有所帮助。您的第二种方法似乎更适合反应形式。
    • 正如@bitscanbyte 所引用的,您可能必须使用多个let x=index 语句。如果您使用具有多个日期选择器的反应式表单,则可以将let i=index[formGroupName]="i"let j=index 用于第一个日期选择器,如答案所示(使用j 除外)。然后对于同一表单组中的更多日期选择器,添加另一个let k=index,然后使用k作为模板引用变量,依此类推。
    • 嗨@theriddle2 我有一个问题在日期选择器上没有得到解答,你可以试试吗?链接是stackoverflow.com/questions/64278503/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-15
    • 2019-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-15
    相关资源
    最近更新 更多