template example entre content comunicacion componentes angular typescript

example - ¿Hay alguna forma de verificar el cableado @Output desde un componente en Angular 2?



output angular 6 (2)

En el método ngOnInit de un componente, los valores de @Input se han vinculado para que pueda verificar esas propiedades en el componente, pero no parece haber una forma de verificar los enlaces de eventos de @Output. Quiero poder saber si @Output se conectó al componente o no.

(usando Angular 2 beta 2 y TypeScript)

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> } }


El mismo enfoque que user1448982 pero sin usar el ObservableWrapper que se supone que es un código de plataforma que no está expuesto para su uso a través de la API.

(Usando Angular 2 RC1 y TypeScript)
Nota: esto solo comenzó a funcionar desde 2.0.0-beta.16 y superior

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

El método ObservableWrapper.hasSubscribers hace esta línea internamente, por lo que puede hacer lo mismo aquí.

Cuando use TypeScript obtendrá un error de tiempo de transcripción si Angular termina cambiando el EventEmitter desde un Subject (que es parte Observable , por lo tanto, la propiedad .observers ).


El siguiente código debería funcionar:

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