It looks like you want to redirect to these components, what you can do is to have an event source on the first component, which when clicked will send data to the parent (out of 3). Then in the parent object you intercept emit and assign it to the data that you pass to other components.
Component1
import { Component, EventEmitter, Output } from '@angular/core'; import { Router } from '@angular/router'; @Component(...) export class Component1 { @Output() redirect:EventEmitter<any> = new EventEmitter(); data:any = {text: "example"}; constructor(private router:Router){} changeComponent(url:string){ this.redirect.emit(data);
Component2 and Component3
import { Component, Input } from '@angular/core'; @Component(...) export class Component2 { @Input() data:any; }
parent
import { Component } from '@angular/core'; @Component(...) export class Parent { parentData:any; }
Parent.html
<component1 (redirect)="parentData=$event"></component1> <component2 [data]="parentData"></component2> <component3 [data]="parentData"></component3>
Another option, if you do not have a parent, is to have a service that you deploy to each parent, and then to intercept the recipients into the OnInit lifecycle interceptor. This works because services are single if they belong to a common module provider.
service
import { Injectable } from '@angular/core'; @Injectable() export class SharingService{ private data:any = undefined; setData(data:any){ this.data = data; } getData():any{ return this.data; } }
Component1
import { Component } from '@angular/core'; import { Router } from '@angular/router'; import { SharingService } form './sharing.service'; @Component(...) export class Component1 { data:any = {text: "example"}; constructor(private router:Router, private sharingService:SharingService){} changeComponent(url:string){ this.sharingService.setData(this.data); this.router.navigate([url]);
Component2 and Component3
import { Component, OnInit } from '@angular/core'; import { SharingService } form './sharing.service'; @Component(...) export class Component2 implements OnInit{ data:any; constructor(private router:Router, private sharingService:SharingService){} ngOnInit(){ this.data = this.sharingService.getData(); } }
Make sure you add it to the array of module providers.
module
import { SharingService } from './sharing.service'; ... @NgModule({ ... providers: [ SharingService ] })