In the ngOnInit
method of a component the @Input
values will have been bound so you can check those properties on the component, but there doesn't seem to be a way to check @Output
event bindings. I want to be able to know if the @Output
was wired up on the component or not.
(using Angular and TypeScript)
import {Component, Output, EventEmitter} from '@angular/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> } }
@Input() and @Output() give a child component a way to communicate with its parent component. @Input() lets a parent component update data in the child component. Conversely, @Output() lets the child send data to a parent component.
๐ Event Emitters in Angular ๐Data flows into your component via property bindings and flows out of your component through event bindings. If you want your component to notify his parent about something you can use the Output decorator with EventEmitter to create a custom event.
Same approach as user1448982 but without using the ObservableWrapper
that is meant to be platform code that is not exposed for use via the api.
(Using Angular 2 RC1 and TypeScript)
Note: This only started working from 2.0.0-beta.16 and greater
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
The ObservableWrapper.hasSubscribers
method does this line internally, so you can just do the same thing here.
When using TypeScript you will get a transpile time error if Angular ever ends up changing the EventEmitter
from a Subject
(which is part Observable
, thus the .observers
property).
The observers
attribute is deprecated since rxjs v7. Instead of checking the length of the observers array, you can now use a boolean that indicates if the subject is in use.
// Old approach this.isCancelUsed = this.cancel.observers.length > 0; // New approach this.isCancelUsed = this.cancel.observed;
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With