-
-
Save gangadharjannu/100eaae3bfa6c3b61fd64e86a46b26ec to your computer and use it in GitHub Desktop.
Angular2 Communicating between sibling components
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import {Injectable, EventEmitter} from 'angular2/core'; | |
@Injectable() | |
export class EmitterService { | |
private static _emitters: { [ID: string]: EventEmitter<any> } = {}; | |
static get(ID: string): EventEmitter<any> { | |
if (!this._emitters[ID]) | |
this._emitters[ID] = new EventEmitter(); | |
return this._emitters[ID]; | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import {Component, Input, OnChanges} from 'angular2/core'; | |
import {EmitterService} from './emitter.service'; | |
@Component({ selector: 'dispatcher', template: '' }) | |
class DispatcherComponent implements OnChanges { | |
@Input() id: string; | |
private value = "dispatcher component value"; | |
doStuff() { | |
EmitterService.get(this.id).emit(value); | |
} | |
} | |
@Component({ selector: 'listener', template: '' }) | |
class ListenerComponent implements OnChanges { | |
@Input() id: string; | |
ngOnChanges() { | |
EmitterService.get(this.id).subscribe(value => console.log(value)); | |
} | |
} | |
@Component({ | |
providers: [EmitterService], | |
selector: 'host', | |
template: ` | |
<dispatcher [id]="host_id"></dispatcher> | |
<listener [id]="host_id"></listener> | |
` | |
}) | |
export class HostComponent { | |
public host_id: "HOST_COMPONENT"; | |
constructor(private _emitterService: EmitterService) {} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
http://stackoverflow.com/a/34807012