I am few days Angular 6 developer ;) and reading about sharing data between components. I have situation when I need to use Service.
I have two components.
First: ClientSearchComponent that read data from backend and transform json response to array of Client objects.
Second: ListClientComponent with template where I will have table of those Clients from ClientSearchComponent
Question is: How to sharing this array of Clients objects from one to other - my code dosn't work ? I found some exmaples but they use BehaviorSubject which as param get string not array.
My code
ClientDataService.ts:
import {Injectable} from '@angular/core';
import {Client} from '../models/client';
@Injectable()
export class ClientDataService {
private data: Client[];
setData(clients: Client[]) {
this.data = clients;
}
getData() {
return this.data;
}
}
ClientSearchComponent.ts
import {Component, OnInit} from '@angular/core';
import {Client} from '../models/client';
import {ClientSearchService} from './client-search.service';
import {ClientDataService} from '../services/client-data.service';
@Component({
selector: 'app-client-search',
templateUrl: './client-search.component.html',
styleUrls: ['./client-search.component.css']
})
export class ClientSearchComponent implements OnInit {
public clientList: Client[];
constructor(private clientSearchService: ClientSearchService, private clientDataService: ClientDataService) {
const css = this.clientSearchService.list('assets/test.json');
css.subscribe((clients: Client[]) => {
this.clientList = clients;
this.clientDataService.setData(clients);
});
}
ngOnInit() {}
}
ClientListComponent.ts
import {Component, OnInit} from '@angular/core';
import {Client} from '../models/client';
import {ClientDataService} from '../services/client-data.service';
@Component({
selector: 'app-client-list',
templateUrl: './client-list.component.html',
styleUrls: ['./client-list.component.css']
})
export class ClientListComponent implements OnInit {
public clientList: Client[];
constructor(private clientDataService: ClientDataService) {
console.log(this.clientDataService.getData());
}
ngOnInit() {
}
}