Angular 4 Events with EventEmitter -
i made service named userevents
@injectable() export class userevents { public evauthenticated: eventemitter<string> = new eventemitter(); public authuserevent(email: string) { this.evauthenticated.next(email); } }
i included service providers in appmodule
i have service name authservice include userevents , emits:
this.userevents.evauthenticated.emit(email);
and service suscribe
constructor(private userevents: userevents){ this.userevents.evauthenticated.subscribe((data: string) => this.setuser(data)); } private setuser(email: string) { this.logger.info('event triggered ' + email); }
but suscription never triggered. @ list, setuser never called.
what wrong here?
from knowledge of angular 2(+), eventemitters used component outputs, i.e.:
@output() mystringoutput = new eventemitter<string>();
if need triggerable event in services, recommended use rxjs subjects, so:
import { injectable } '@angular/core' import { subject } 'rxjs/subject'; @injectable() export class myservice { private _onmyevent = new subject<string>(); public onmyevent(): observable { return this._onmyevent.asobservable(); } public trigger(value: string) { this._onmyevent.next(value); } }
and elsewhere in code, can this:
this.myservice.onmyevent.subscribe((value: string) => console.log('triggered!', value)); this.myservice.trigger('hello world')
Comments
Post a Comment