2015-11-19 32 views
5

angolare versione 2 utilizzati: 2.0.0-alpha.44Come per emettere un evento @Output in angolare 2

Sto cercando di emettere un segnale di uscita da un componente. Ho seguito la documentazione angolari here Sotto è il codice della mia componente

@Component({ 
    selector: 'summary' 
}) 
@View({ 
    directives: [NgFor, NgIf, ROUTER_DIRECTIVES, LogoutComponent, BarChartDirective, SunburstChartDirective], 
    templateUrl: 'view/summary-component.html' 
}) 
export class SummaryComponent { 
    @Output() loadSummary: EventEmitter = new EventEmitter(); 
    project: Project; 
    data: any; 

    constructor(public http: Http, 
      public router: Router, 
      public xxxGlobalService: XXXGlobalService) { 
     console.log("SummaryComponent: Created"); 
     this.getSummary() 
    } 

    getSummary() { 
     this.project = this.xxxGlobalService.getOpenedProject(); 
     var url = "/project_summary?username="+ this.xxxGlobalService.getUser().name + "&project_id=" + this.project.id; 
     this.http.get(url) 
       .map(res => res.json()) 
       .subscribe(
        data => this.extractData(data), 
        err => this.logError(err), 
       () => console.log('SummaryComponent: Successfully got the summary') 
     ); 
    } 

    extractData(data) { 
     this.data = data; 
     console.log("SummaryComponent: Emitting loadSummary event"); 
     this.loadSummary.next("event"); 
    } 
} 

Tuttavia ottengo errore che dice "TypeError: router_1.EventEmitter non è una funzione" quando si tenta di assegnare l'EventEmitter (sotto la linea)

@Output() loadSummary: EventEmitter = new EventEmitter(); 

ho controllato il link e modificato la linea a guardare come

@Output() loadSummary: EventEmitter; 

Ma la loadSumm Ary sembra essere indefinito dappertutto. Come emettere il segnale di uscita? Per favore aiuto

+2

'EventEmitter' devono essere importati da' angular2/angular2' non da 'angular2/router'. –

+0

@EricMartinez. Molte grazie. Ha funzionato. –

+0

Per Angular2 beta 3 utilizzare import EventEmitter da 'angular2/core' –

risposta

4

A partire da beta.0 (e forse prima), EventEmitter è ora in angular2/core.

emettono un evento utilizzando emit():

@Output() loadSummary: EventEmitter<any> = new EventEmitter(); 
... 
this.loadSummary.emit("event"); 
+3

L'evento emesso sembra essere perso se emesso dal costruttore. Apparentemente il @Output non è vincolato fino a dopo il costruttore. –

Problemi correlati