Ho un oggetto che desidero condividere tra i miei componenti in un'app Angular2.Angular2 - Condivisione di dati tra componenti tramite servizi
Ecco l'origine del primo componente:
/* app.component.ts */
// ...imports
import {ConfigService} from './config.service';
@Component({
selector: 'my-app',
templateUrl: 'app/templates/app.html',
directives: [Grid],
providers: [ConfigService]
})
export class AppComponent {
public size: number;
public square: number;
constructor(_configService: ConfigService) {
this.size = 16;
this.square = Math.sqrt(this.size);
// Here I call the service to put my data
_configService.setOption('size', this.size);
_configService.setOption('square', this.square);
}
}
e il secondo componente:
/* grid.component.ts */
// ...imports
import {ConfigService} from './config.service';
@Component({
selector: 'grid',
templateUrl: 'app/templates/grid.html',
providers: [ConfigService]
})
export class Grid {
public config;
public header = [];
constructor(_configService: ConfigService) {
// issue is here, the _configService.getConfig() get an empty object
// but I had filled it just before
this.config = _configService.getConfig();
}
}
e, infine, il mio piccolo servizio, il ConfigService:
/* config.service.ts */
import {Injectable} from 'angular2/core';
@Injectable()
export class ConfigService {
private config = {};
setOption(option, value) {
this.config[option] = value;
}
getConfig() {
return this.config;
}
}
miei dati non sono condivisi, nel grid.component.ts, la riga _configService.getConfig()
restituisce un oggetto vuoto, bu t è riempito poco prima in app.component.ts.
Ho letto i documenti e le esercitazioni, niente ha funzionato.
Cosa mi manca?
Grazie
RISOLTI
Il mio problema era che stavo iniettando il mio ConfigService due volte. Nel bootstrap dell'applicazione e nel file in cui lo sto usando.
Ho rimosso l'impostazione providers
e ha funzionato!
Come nota a margine, prendere in considerazione lo spostamento delle chiamate di servizio dal costruttore. – Stanislasdrg
http://www.angulartutorial.net/2017/09/angular-share-data-between-components.html – Prashobh