Wenn Sie untergeordnete Komponente hat:
@Input x(): number;
Dazu werden aufgefordert, einen Wert von der übergeordneten an die untergeordnete Komponente wie folgt zu übergeben:
<my-component [x]="myVariable"></my-component>
Dabei steht 'myVariable
' für eine Variable vom Typ 'number
'. In Ihrem Fall hat Ihre Eingabe den Namen 'inputEvents
' und ist vom Typ 'EventEmitter<{ type: string, data: string | DateModel }>
'. Also würden Sie von Ihrer Elternkomponente die Eingabe genau gleich übergeben.
<ng2-datepicker [(ngModel)]="myDate" [inputEvents]='toggleCalEvent'></ng2-datepicker>
Wo Variable 'toggleCalEvent
' vom Typ 'EventEmitter<{ type: string, data: string | DateModel }>
', wie es so auf der Stammkomponente:
private toggleCalEvent: EventEmitter<{ type: string, data: string | DateModel }> = new EventEmitter();
Dann könnte man auf diesen EventEmitter wie jeder EventEmitter nennen:
openCal() {
this.toggleCalEvent.next({ type: 'action', data: 'toggle' });
}
Da der Datepicker diesen 'inputEvents
' abonniert hat, wird beim Triggern eines 'next
' dieser ausgelöst s Ereignis im Kind. Aber es gibt immer noch ein Problem. Wenn Sie dieses Ereignis mit einem Klick auf etwas auslösen, wird es nicht funktionieren. Versuchen Sie folgendes:
<div
(click)='openCal()'
(mouseenter)='openCal()'
style='background-color:yellow; width:100px; height:50px;'
></div>
<ng2-datepicker [(ngModel)]="myDate" [inputEvents]='toggleCalEvent'></ng2-datepicker>
Sie werden sehen, dass der Kalender auf mouseenter schaltet, aber nicht klickt. Dies liegt daran, dass der Datapicker zum Schließen gescriptet ist, wenn Sie irgendwo außerhalb des Kalenders klicken. So öffnet und schließt es sich sofort beim Klick auf das div. Um dies zu verhindern, können Sie diese fügen Sie den Klick, um zu verhindern sprudeln:
<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();
}
nun der Kalender zeigen Toggle wie erwartet.