【问题标题】:Setting angular material date picker value programmatically以编程方式设置角度材料日期选择器值
【发布时间】:2020-03-27 21:27:43
【问题描述】:

我在我的一个角项目组件中使用角材料日期选择器。该组件有两个选项卡。使用 *ng如果我根据用户单击的内容一次只显示一个。在一个选项卡中,用户选择一个日期,如果导航到同一组件的其他选项卡并返回到前一个选项卡,我需要保留所选日期。

这就是我在HTML方面所做的:

<mat-form-field class="dropdownWidth">
      <input #dateInput matInput [matDatepickerFilter]="myFilter" [matDatepicker]="picker"
             placeholder="Choose a date"
             [value]="datePickerDate"
             [(ngModel)]="datePickerDate"
             (dateChange)="addDateEvent($event)"
             [disabled]="selectedOperator.length === 0 && userDateRange.length === 0">
      <mat-datepicker-toggle matSuffix [for]="picker"></mat-datepicker-toggle>
      <mat-datepicker #picker></mat-datepicker>
</mat-form-field>

在TS文件中:

addDateEvent(event) {
   this.datePickerEvent = event;
   this.datePickerDate = new Date(`${event.value['_i'].month + 1}-${event.value['_i'].date}-${event.value['_i'].year}`);
   this.formatDate = moment(event.value).format('YYYY-MM-DD');
}

但是当我向后导航时,日期值不会保留。有什么建议我该如何实现这一目标?

这里是示例stackblitz

【问题讨论】:

  • 你能创建一个stackblitz 的例子吗?
  • 这是因为当您在选项卡之间导航时,组件会再次呈现。如果你想在本地保存这个值,你应该使用 localstorage 来保存/检索值。
  • @StepUp 我已经添加了 stackblitz 链接。在这里您可以看到在选项卡之间导航不会保留日期。
  • @Mridul 始终在同一个组件中,选项卡项及其内容在同一个组件中,因此组件不再呈现,但我也检查了您的解决方案,它没有解决
  • This 回答会有所帮助

标签: javascript angular typescript angular-material


【解决方案1】:

在您的示例中,您没有使用任何绑定。尝试使用[(ngModel)],这样它将获取并保持选定的值。

这样做,它会工作:

<mat-form-field>
          <input matInput [(ngModel)]="date" [matDatepicker]="picker" placeholder="Choose a date">
          <mat-datepicker-toggle matSuffix [for]="picker"></mat-datepicker-toggle>
          <mat-datepicker #picker></mat-datepicker>
</mat-form-field>

【讨论】:

    【解决方案2】:

    它不起作用,因为您没有存储选定的值。所以在打字稿中创建一个变量:

    yourDate: any;
    

    HTML:

    <p> YourDate  {{ yourDate | date }} </p>
    
    <mat-form-field>
        <input matInput [(ngModel)]="yourDate" [matDatepicker]="picker" placeholder="Choose a date">
        <mat-datepicker-toggle matSuffix [for]="picker"></mat-datepicker-toggle>
        <mat-datepicker #picker></mat-datepicker>
    </mat-form-field>
    

    可以看到whole code at stackblitz

    【讨论】:

    • 我已经更新了我的 stackblitz 代码,在 ts 文件中有变量,但现在由于某种原因我什至无法首先选择日期
    • 我已经根据你的 stackblitz 链接修改了我的项目代码,但由于一些奇怪的原因它仍然无法正常工作:(现在正在调试它。
    • @BijaySingh 尝试复制和粘贴代码。它应该工作。你测试过 stackblitz 的例子吗?
    • 是的,我用你的代码进行了测试,它帮助了我。此外,我能够弄清楚为什么它对我不起作用,这是因为我还在日期选择器上使用了一个过滤器,并且该过滤器是根据在选择日期之前选择的一些选项来设置的。
    • @BijaySingh 很高兴它对您有所帮助!你很酷,因为你找到了你的代码不工作的原因! :)
    猜你喜欢
    • 1970-01-01
    • 2019-07-08
    • 1970-01-01
    • 1970-01-01
    • 2018-09-13
    • 1970-01-01
    • 1970-01-01
    • 2019-03-04
    • 1970-01-01
    相关资源
    最近更新 更多