i have the same problem of this issue :
Share data between components using a service in Angular2
but it won't work because i think injecting service into two components mean that there is two instance ot the service class . so trying to modify the data from component in the service and see the change in the other component still not working . what is the solution so ?
NB :
i have try the solutions in the comments but still not working ...
this is my service :
import { Injectable } from '@angular/core';
@Injectable()
export class TestService {
counter: number = 0 ;
constructor() {
console.log('instanciate Test Service' + this.counter ) ;
this.counter ++ ;
}
setCounter(counter: number){
this.counter =counter ;
console.log('new value of counter is ' + this.counter );
}
}
the first component :
@Component({
selector: 'rb-test',
templateUrl: './test.component.html',
styleUrls: ['./test.component.css']
})
export class TestComponent implements OnInit , OnChanges ,DoCheck{
bindingdata = 'test' ;
data: number;
constructor(public _ts: TestService) {
}
ngOnChanges(){
this.data=this._ts.counter ;
console.log('is changing');
}
ngDoCheck(){
this.data=this._ts.counter ;
console.log('is doing check');
}
ngOnInit() {
this.data = this._ts.counter;
}
}
template of the first component :
{{data}}
<input type="text" [(ngModel)]="bindingdata" />
the second component :
@Component({
selector: 'rb-other-test',
templateUrl: './other-test.component.html',
styleUrls: ['./other-test.component.css']
})
export class OtherTestComponent implements OnInit ,OnDestroy{
data: number;
constructor(public _ts: TestService) { }
ngOnInit() {
this.data= this._ts.counter;
}
public change(){
this._ts.setCounter(7878);
this.data = this._ts.counter;
}
ngOnDestroy() {
}
}
the template of second component :
<input type="submit" value="change" (click)="change()">
{{data}}
result :