2015-11-19 2 views
5

Угловой 2 версии используется: 2.0.0-alpha.44Как испускает событие @output в угловой 2

Я пытаюсь испускаю выходной сигнал из компонента. Я следовал угловые документы here .Below является код моего компонента

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

Однако я получаю ошибку говоря «TypeError: router_1.EventEmitter не является функцией», когда я пытаюсь выделить EventEmitter (ниже линии)

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

Я проверил link и изменил линию выглядеть

@Output() loadSummary: EventEmitter; 

но loadSumm ary, кажется, не определено повсюду. Как испустить выходной сигнал? Пожалуйста, помогите

+2

'EventEmitter' должны быть импортированы из' angular2/angular2' не из 'angular2/router'. –

+0

@ EricMartinez. Большое спасибо. Это сработало. –

+0

Для Angular2 beta 3 используйте импорт EventEmitter из 'angular2/core' –

ответ

4

Начиная с версии бета.0 (и, возможно, раньше), EventEmitter теперь находится в angular2/core.

Испустите событие с помощью emit():

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

Испущенное событие, кажется, потеряно при испускании конструктора. Очевидно, @Output не связан только после конструктора. –

Смежные вопросы