2015-10-30 16 views
9

Bir bileşenin ngOnInit yönteminde, 0Input değerleri bağlanmıştır, böylece bu özellikleri bileşende kontrol edebilirsiniz, ancak @Output event bindings öğesini denetlemenin bir yolu yoktur. @Output'un bileşen üzerinde kurulu olup olmadığını bilmek istiyorum. @ Açma teli, Açısal 2'deki bir bileşen içinde kontrol etmenin bir yolu var mı?

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

@Component({ 
    selector: 'sample', 
    template: `<p>a sample</p>` 
}) 
export class SampleComponent { 
    @Output() cancel = new EventEmitter(); 

    ngOnInit() { 
     // would like to check and see if cancel was used 
     // on the element <sample (cancel)="doSomething()"></sample> 
     // or not <sample></sample> 
    } 
} 

cevap

16

aynı yaklaşım user1448982 olarak değil, bir platform kodu çıkartılacaktır ObservableWrapper kullanmadan bu api ile kullanım için açık değildir.


Not (Açısal 2 RC1 ve typescript kullanarak)

: Bu yalnızca ObservableWrapper.hasSubscribers yöntem, bu çizgi yok 2.0.0-beta.16 ve daha

import {Component, Output, EventEmitter} from '@angular/core'; 

@Component({ 
    selector: 'sample', 
    template: `<p>a sample</p>` 
}) 
export class SampleComponent { 
    @Output() cancel = new EventEmitter(); 
    private isCancelUsed = false; 

    ngOnInit() { 
     this.isCancelUsed = this.cancel.observers.length > 0; 
    } 
} 

Plunker

çalışan başladı dahili olarak, aynı şeyi burada yapabilirsin.

Eğik hiç bir Subject dan EventEmitter değişen biter eğer (part Observable, böylece .observers mülkiyet olan) bir transpile zaman hatası alırsınız typescript kullanarak.

3

Aşağıdaki kod çalışır (Açısal 2 beta 2 ve typescript kullanılarak):

import {Component, Output, EventEmitter, OnInit} from 'angular2/core'; 
import {ObservableWrapper} from 'angular2/src/facade/async'; 

@Component({ 
    selector: 'sample', 
    template: `<p>a sample</p>` 
}) 
export class SampleComponent implements OnInit { 
    @Output() cancel: EventEmitter<any> = new EventEmitter(); 

    private isCancelUsed: boolean; 

    ngOnInit(): void { 
     this.isCancelUsed = ObservableWrapper.hasSubscribers(this.cancel); 
    } 
} 
+0

Buna güvenmeyin. Açısal takım, 'EventEmitter' 'Gözlemlenebilir' olarak devam edeceğine dair herhangi bir garanti vermez. –

İlgili konular