如果您的子组件有:
@Input x(): number;
然后你被要求将一个值从父组件传递给子组件:
<my-component [x]="myVariable"></my-component>
其中“myVariable”表示类型为“number”的变量。在您的情况下,您的输入名为“inputEvents”,类型为“EventEmitter<{ type: string, data: string | DateModel }>”。因此,从您的父组件中,您将传递相同的输入。
<ng2-datepicker [(ngModel)]="myDate" [inputEvents]='toggleCalEvent'></ng2-datepicker>
其中变量“toggleCalEvent”的类型为“EventEmitter<{ type: string, data: string | DateModel }>”,在您的父组件上也是如此:
private toggleCalEvent: EventEmitter<{ type: string, data: string | DateModel }> = new EventEmitter();
然后你可以像调用任何 EventEmitter 一样调用这个 EventEmitter:
openCal() {
this.toggleCalEvent.next({ type: 'action', data: 'toggle' });
}
由于 datepicker 订阅了这个 'inputEvents',那么当你触发一个 'next' 时,它会在 child 中触发这个事件。但是还有一个问题。如果您在单击某物时触发此事件,它将不起作用。试试这个:
<div
(click)='openCal()'
(mouseenter)='openCal()'
style='background-color:yellow; width:100px; height:50px;'
></div>
<ng2-datepicker [(ngModel)]="myDate" [inputEvents]='toggleCalEvent'></ng2-datepicker>
您将看到日历在 mouseenter 上切换,但没有单击。这是因为如果您单击日历之外的任何位置,日期选择器就会关闭。因此,它会在单击 div 时立即打开和关闭。为了防止这种情况,您可以添加它以防止点击冒泡:
<div
(click)='openCal($event)'
(mouseenter)='openCal($event)'
style='background-color:yellow; width:100px; height:50px;'
></div>
<ng2-datepicker [(ngModel)]="myDate" [inputEvents]='toggleCalEvent'></ng2-datepicker>
openCal(e) {
this.toggleCalEvent.next({ type: 'action', data: 'toggle' });
e.preventDefault();
e.stopImmediatePropagation();
}
现在日历显示按预期切换。