Hoe gegevens van onderliggende naar bovenliggende component Angular door te geven

Ik heb een component met de naam search_detail die een andere component heeft met de naam kalender,

SearchDetail_component.html

<li class="date">
   <div class="btn-group dropdown" [class.open]="DatedropdownOpened">
   <button type="button" (click)="DatedropdownOpened = !DatedropdownOpened"   class="btn btn-default dropdown-toggle" data-toggle="dropdown"
aria-haspopup="true" [attr.aria-expanded]="dropdownOpened ? 'true': 'false'">
      Date <span class="caret"></span>
  </button>
  <ul class="dropdown-menu default-dropdown">
     <calendar  ></calendar>
     <button > Cancel </button>
     <button (click)="setDate(category)"> Ok </button>
   </ul>                            
 </div>
</li>

SearchDetail_component.ts

import 'rxjs/add/observable/fromEvent';
@Component({
    selector: 'searchDetail',
    templateUrl: './search_detail.component.html',
    moduleId: module.id
})

Calendar.component.ts

import { Component, Input} from '@angular/core'; 
@Component({
    moduleId:module.id,
    selector: 'calendar',
    templateUrl: './calendar.component.html'
})
    export class CalendarComponent{
      public fromDate:Date = new Date();    
      private toDate:Date = new Date();
      private events:Array<any>;
      private tomorrow:Date;
      private afterTomorrow:Date;
      private formats:Array<string> = ['DD-MM-YYYY', 'YYYY/MM/DD', 'DD.MM.YYYY', 'shortDate'];
      private format = this.formats[0];
      private dateOptions:any = {
        formatYear: 'YY',
        startingDay: 1
      };
      private opened:boolean = false;
      public getDate():number {
        return this.fromDate.getDate()  || new Date().getTime();
      }
    }

Ik wil toegang tot de startdatum en einddatum door op de ok-knop op de zoekdetailpagina te klikken. hoe kan ik dat doen?


Antwoord 1, autoriteit 100%

Registreer de EventEmitterin uw onderliggende component als de @Output:

@Output() onDatePicked = new EventEmitter<any>();

Waarde verzenden bij klik:

public pickDate(date: any): void {
    this.onDatePicked.emit(date);
}

Luister naar de gebeurtenissen in de sjabloon van uw bovenliggende component:

<div>
    <calendar (onDatePicked)="doSomething($event)"></calendar>
</div>

en in de bovenliggende component:

public doSomething(date: any):void {
    console.log('Picked date: ', date);
}

Het wordt ook goed uitgelegd in de officiële documenten: Componentinteractie.


Antwoord 2

Om gegevens van de onderliggende component te verzenden, maakt u een eigenschap die is versierd met output() in de onderliggende component en luistert u naar de gemaakte gebeurtenis. Zend deze gebeurtenis uit met nieuwe waarden in de payload wanneer dat nodig is.

@Output() public eventName:EventEmitter = new EventEmitter();

om dit evenement uit te zenden:

this.eventName.emit(payloadDataObject);

Antwoord 3

De meeste nieuwe versie Als er een fout optreedt, vervang deze regel dan

@Output() parentComponent = nieuwe EventEmitter();

Het zal je fout bijna oplossen

Other episodes