4

Çok basit taban sınıfı CloserEğik 2 Temel Sınıf Çıktı EventEmitter kaldırdı ya ele almaz

import {EventEmitter, Output} from 'angular2/core'; 

export class Closer { 
    @Output() closed: EventEmitter<any> = new EventEmitter(); 

    constructor() {} 

    close() { 
    this.closed.emit({}); 
    } 
} 

ben başka bir sınıfa extends Closer ve sonra

<derived-class (closed)="closeHandler()"></derived-class> 

closeHandler() ile işaretlerseniz asla aradı. Closer.close()'un çağrıldığını görebiliyorum ancak yayma, türetilmiş sınıf tarafından yayılmıyor veya şablon türetilmiş sınıf ve olay bağlamasını içeren sınıf tarafından işlenmiyor.

@Output türetilmiş sınıfına taşınırsam çalışır. Ama Angular2'nin türetilmiş sınıflara koyması gerektiği anlaşılıyor. Bir dizi davranışı tam olarak tanımlayabilme ve miras bırakabilme becerisi güzel olurdu.

cevap

6

Bu sabah aynı problemi yaşadım ve nasıl yapılacağını anladım. Eğer yapmak için gereken çıkışları ekleyin: [ 'kapalı'] daha yakın uzanan türetilmiş sınıfı bileşenlerin bölümüne ve daha yakın sınıf içinde kapalı beyandan Çıkışta() kaldırmak zorunda

Türetilmiş Sınıf:

@Component({ 
    selector: 'derived-class', 
    outputs: ['closed'] 
}) 
export class DerivedClass extends Closer {} 

Closer Sınıf: Burada hızlı bir demo senin örneğine dayanarak olduğunu

import {EventEmitter} from 'angular2/core'; 

export class Closer { 
    closed: EventEmitter<any> = new EventEmitter(); 

    constructor() {} 

    close() { 
    this.closed.emit({}); 
    } 
} 
+0

Teşekkürler bunun için! Tslint kullanıyorsanız, linter hatasını "// tslint: disable-next-line: use-output-property-decorator" ile devre dışı bırakabilirsiniz. – Jessycormier