有两种简单的方法可以使用Angular Material实现选择,其中选项是学期,季度和月份相互绑定?

问题描述

我正在尝试使用Angular Material select构建特殊的日期选择,其中mat-options如下:第一和第二学期,第一,第二,第三,第四季度和12个月。而且我希望它能正常工作,例如,如果我选择第二学期,那么将自动选择第三学期和第四学期,并且从7月到12月(也就是第二学期的月份)进行选择。如果我取消选择“十月”,则“席位选择”会自动取消选择第二学期和第三季度,而不是第四季度。我希望,我可以正确地解释任务,对我而言,首先,这似乎是一项非常简单的任务,但是由于很多天我无法实施解决方案。任何人都可以帮助我,如何在我希望将这些日期范围相互绑定的情况下解决此问题? 这是我尝试的一些代码,以及一张我想要得到的图片

<mat-select multiple>
    <mat-option *ngFor="let semester of dateYear.semesters"
                (onSelectionChange)="selectDateInterval(dateYear.year,semester,$event)">
        {{semester.text}}</mat-option>
    <hr>
    <mat-option *ngFor="let quarter of dateYear.quarters"
                (onSelectionChange)="selectDateInterval(dateYear.year,quarter,$event)">{{quarter.text}}</mat-option>
    <hr>
    <mat-option *ngFor="let month of dateYear.months"
                (onSelectionChange)="selectDateInterval(dateYear.year,month,$event)">{{month.text}}</mat-option>
</mat-select>

my expectation on select first semester

my expectation on deselect March

(对于结果,我想在数组中获取选定的月份索引:第一个图片:[1,2,3,4,5,6],第二个图片:[1,6](或从零开始索引))

不幸的是,没有属性,可以在其中设置是否选择mat-option(例如:

对于任何可能的解决方案,我都非常感激,即使是基于反应形式的方法还是不是基于Angular Material的解决方案。谢谢

解决方法

我建议一种包括反应形式的解决方案:将formControl连接到您的mat-select。然后像这样听变化:

formControl.valueChanges.subscribe({next: (value) => { your logic here }});

您还需要跟踪选择中的更改,以便可以采取相应措施。因此,我建议使用:rxjs pairwise运算符:RxJS observable which emits both previous and current value starting from first emission