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') 

plunkr.


Comments

Popular posts from this blog

ubuntu - PHP script to find files of certain extensions in a directory, returns populated array when run in browser, but empty array when run from terminal -

php - How can i create a user dashboard -

javascript - How to detect toggling of the fullscreen-toolbar in jQuery Mobile? -