【问题标题】:Datepicker doesn't disable all unavailable datesDatepicker 不会禁用所有不可用的日期
【发布时间】:2019-01-21 12:42:51
【问题描述】:

编辑: 我在过滤器中发现了部分问题,如果我打印 console.log(天),当我在 12 月到达时,日期相当于 01/00/2019, 02/00/2019 ... 因为 .get ('month ') 从索引 0 开始,但我不知道如何修复它

当我检索服务器的不可用日期(一个包含 20 多个日期的大表)时,我设法禁用了第一个日期范围,但不是所有日期。

这是我的服务器示例的响应:

{
"arrayOfUnavailableDates": [
    "2018-12-01",
    "2018-12-02",
    "2018-12-03",
    "2018-12-04",
    "2018-12-05",
    "2018-12-06",
    "2018-12-07",
    "2018-12-08",
    "2018-12-09",
    "2018-12-10",
    "2018-12-11",
    "2018-12-12",
    "2018-12-13",
    "2018-12-14",
    "2018-12-15",
    "2018-12-16",
    "2018-10-05",
    "2018-10-06",
    "2018-10-07",
    "2018-10-08",
    "2018-10-09",
    "2018-10-10"
    ]
}

我得到这个数组的角度与

getUnavailableDatesOfCoach(coachId: number): Observable<Date[]> {
const queryParams = `?coachId=${coachId}`;

return this._http
  .get<{ arrayOfUnavailableDates: Date[] }>(
    `${this.apiUrlUnavailableDate}` + queryParams
  )
  .pipe(map(data => data.arrayOfUnavailableDates));
}

这是我的过滤方法:

myFilter = (d: Date): boolean => {
this._route.queryParams.subscribe(params => {
  if (params['coachId']) {
    this._unavailableDateService
      .getUnavailableDatesOfCoach(params['coachId'])
      .subscribe(arrayOfUnavailableDates => {
        this.disableDateList = arrayOfUnavailableDates;
        console.log(this.disableDateList);
      });
  }
});
const dateMoment = moment(d);

let date: any;
let month: any;
// console.log(dateMoment.get('date'));
if (dateMoment.get('date').toString().length < 2) {
  date = '0' + dateMoment.get('date').toString();
} else {
  date = dateMoment.get('date').toString();
}

if (
  dateMoment
    .add(1, 'M')
    .get('month')
    .toString().length < 2
) {
  month =
    '0' +
    dateMoment
      .get('month')
      .toString()
      .toString();
} else {
  month = dateMoment
    .get('month')
    .toString()
    .toString();
}

const day = dateMoment.get('year').toString() + '-' + month + '-' + date;
// console.log(day);
return !this.disableDateList.includes(day);
// tslint:disable-next-line:semicolon
};

日期选择器会停用 10 月 5 日至 10 日的日期,但不会停用 12 月的日期...

谢谢!

【问题讨论】:

    标签: angular angular-material


    【解决方案1】:

    试试这样:

    disable dates using filter

     disableDateList: Array<any> = [
        '2018-08-01',
        '2018-08-02',
        '2018-08-03',
        '2018-08-04',
        '2018-08-05',
        '2018-08-06',
        '2018-08-15',
        '2018-08-15',
        '2018-10-15',
        '2018-11-15',
        '2018-12-15',
        '2019-02-15',
        '2019-11-05',
        '2019-12-15'
      ];
    
      myFilter = (d: Date): boolean => {
        d = new Date(d);
    
        let date: any;
        let month: any;
    
        if (d.getDate().toString().length < 2) {
          date = '0' + d.getDate().toString()
        } else {
          date = d.getDate().toString()
        }
    
        if ((d.getMonth() + 1).toString().length < 2) {
          month = '0' + (d.getMonth() + 1).toString()
        } else {
          month = (d.getMonth() + 1).toString()
        }
    
        const day = d.getFullYear().toString() + "-" + month + "-" + date;
    
        return !this.disableDateList.includes(day);
      }
    

    【讨论】:

    • 当我使用此代码时出现错误ERROR TypeError: d.getDate is not a function 这就是我使用 moment 的原因,我更喜欢您的版本,但它不适用于我的代码:/
    • van 你创建了 stackblitz??
    • 它的工作!谢谢你,你真棒。我还有一个问题,我添加了使用后端在过滤器中检索日期的方法,但这是检索日期的好地方吗?我觉得它会减慢应用程序的速度
    • 我建议在 myfilter return observable 之外调用 api 。如果不工作,请尝试 ping 我回来。我一定会帮助你的。
    • 当我在 ngOnInit 中获得教练的 id 时,我调用了我的 api,一切都变得更好,再次感谢您! :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-19
    • 2018-05-24
    • 1970-01-01
    相关资源
    最近更新 更多