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