由于MatDatepicker 和MatCalendarHeader 是两个独立的组件,您需要使用EventEmitter 或BehaviourSubject 通过使用服务在组件之间传递数据。
对于这个例子,我将使用一个服务。首先,您可以创建一个名为calendar-service.ts 的服务,用于在组件之间共享数据。在这个类中,我们将使用BehaviourSubject 发出更新后的布尔值,它表示日期选择器应该打开还是关闭。
import { Injectable } from '@angular/core';
import { BehaviorSubject } from 'rxjs';
@Injectable()
export class CalendarService {
closeCalendarSource = new BehaviorSubject<boolean>(false);
isCloseCalander = this.closeCalendarSource.asObservable();
constructor() { }
closeCalander(message: boolean) {
this.closeCalendarSource.next(message)
}
}
在MatCalendarHeader 的模板上,您应该添加一个绑定到单击事件的按钮,这将触发关闭日期选择器的操作
<button mat-icon-button (click)="closeCalendar()" >
<mat-icon>close</mat-icon>
</button>
而在 header 的 component.ts 上,
constructor(
private calendarService: CalendarService) {
}
closeCalendar() {
this.calendarService.closeCalander(true);
}
在使用MatDatepicker 的主组件上,您将订阅从头组件发出当前值的可观察对象。
@ViewChild('picker', { static: false}) picker;
exampleHeader = ExampleHeader;
constructor(private calendarService: CalendarService) {}
ngOnInit() {
this.calendarService.isCloseCalander.subscribe(isClose => {
if (isClose) {
this.picker.close();
}
});
}
我已经通过here创建了完整的演示。