2015-11-19 3 views
5

Angular 2-Version verwendet auszusenden: 2.0.0-alpha.44Wie ein @Output Ereignis in Angular 2

Ich versuche, ein Ausgangssignal von einer Komponente zu emittieren. Ich folgte den Angular docs here .Below der Code meiner Komponente

@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"); 
    } 
} 

aber ich bekomme Fehlermeldung, dass „Typeerror: router_1.EventEmitter ist keine Funktion“, wenn ich versuche, die EventEmitter (unterhalb der Linie) zuzuteilen

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

überprüfte ich die link und modifiziert, um die Zeile wie

@Output() loadSummary: EventEmitter; 

zu sehen, aber die loadSumm Es scheint überall undefiniert zu sein. Wie wird das Ausgangssignal ausgegeben? Bitte helfen Sie

+2

'EventEmitter' muss von' angular2/angular2' nicht von 'angular2/router' importiert werden. –

+0

@EricMartinez. Danke vielmals. Es funktionierte. –

+0

Für Angular2 Beta 3 importieren Sie EventEmitter von 'angular2/core' –

Antwort

4

Ab der Beta.0 (und vielleicht früher), EventEmitter ist jetzt in angular2/core.

Emit ein Ereignis mit emit():

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

Das emittierte Ereignis scheint verloren zu gehen, wenn es vom Konstruktor ausgegeben wird. Anscheinend ist der @Output erst nach dem Konstruktor gebunden. –