【问题标题】:Issue with the mat-datepicker in a loop循环中的 mat-datepicker 问题
【发布时间】:2020-10-25 17:49:26
【问题描述】:

我正在学习 angularjs 并且对它很陌生。我正在尝试以下列方式使用 ngFor 在 GUI 上创建 5 个 mat-datepicker 组件(经过大量在线搜索)

<div fxLayout="row" fxFlex=20 fxLayoutAlign="center center" fxLayoutGap="35px">
            <mat-form-field fxFlex=20 appearance="outline" *ngFor="let pay of loanDetails.paymentOptions; index as i;">
                <mat-label>Start Date</mat-label>
                <input matInput [matDatepicker]="i" placeholder="Start date" [(ngModel)]="pay.paymentDate" (dateChange)="getLoanOutputData()">
                <mat-datepicker-toggle matSuffix [for]="i"></mat-datepicker-toggle>
                <mat-datepicker #i></mat-datepicker>
            </mat-form-field>
</div>

但是,这似乎不起作用(意思是,当我单击日历图标时,日历没有打开)并且引发​​了一些异常。

页面加载错误:

点击日历图标时,出现以下错误:

这是我的loanDetails在ts文件中的结构

loanDetails = {
        principal: 100000,
        interestRate: 9.5,
        tenure: 5,
        startDate: new Date(),
        paymentOptions: [this.oneTimePay, this.yearlyPay, this.halfYearlyPay, this.quarterlyPay, this.monthlyPay]
    };

oneTimePay = {
        paymentType: "OneTime Payment",
        paymentDate: new Date(),
        paymentAmt: 0
    }

所有其他“支付”,如monthlyPay 等。遵循与oneTimePay 相同的模式

请帮助我了解哪里出了问题。

【问题讨论】:

    标签: angular angular-material mat-datepicker


    【解决方案1】:

    您确实在使用 Angular(而不是 Angularjs)。好吧,在 *ngFor 中你没有关心“模板引用变量”的名称,你应该使用相同的(你不能使用“i”,因为 Angular 有两个变量“i”——循环的变量和模板参考-

           <mat-form-field fxFlex=20 appearance="outline" 
             *ngFor="let pay of loanDetails.paymentOptions; index as i;">
                <mat-label>Start Date</mat-label>
                 <!--see that use always 'picker'-->
                <input matInput [matDatepicker]="picker" placeholder="Start date" [(ngModel)]="pay.paymentDate" (dateChange)="getLoanOutputData()">
                <!--again 'picker'-->
                <mat-datepicker-toggle matSuffix [for]="picker"></mat-datepicker-toggle>
                <!--and again 'picker'-->
                <mat-datepicker #picker></mat-datepicker>
            </mat-form-field>
    

    【讨论】:

    • Eliseo,没想到这么简单。我遇到过这些文章,其中我读到每个 datepicker 组件的“选择器”引用必须是唯一的,所以我试图通过使用索引来引入这种唯一性。您能否详细说明什么是“模板参考”?另外,angular和angularjs之间的区别?如果您重定向到我,很高兴浏览网页。谢谢
    • @Ravi,Angular 和 AngularJs 完全不同 -AngularJs 是在 2010 年 10 月制作的,现在已经过时了 - Angular 是为相同的人制作的,但是全部更改 - 其他名称,我想是怀旧的致敬-:使用打字稿,模块,组件......作为“模板引用”,我想说模板引用变量,是的,必须是 uniq 在某种意义上具有“范围”。一般来说,“范围”是所有组件,但如果您在 *ngFor 内部,则范围在 *ngFor 内部 - 您可以使用 ViewChildren 从 .ts 中获取它,但不能在 * 外部的 hmtl 中使用ngFor-
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多