Ich habe ein Objekt, das ich zwischen meinen Komponenten in einer Angular2 App teilen möchte. HierAngular2 - Teilen von Daten zwischen Komponenten mit Diensten
ist die Quelle der ersten Komponente:
/* 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);
}
}
und die zweite Komponente:
/* 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();
}
}
und schließlich mein kleiner Service, die 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;
}
}
Meine Daten werden nicht geteilt, in der grid.component.ts gibt die _configService.getConfig()
Zeile ein leeres Objekt zurück, bu t es ist gerade zuvor in der app.component.ts gefüllt.
Ich las die Dokumente und Tutorials, nichts hat funktioniert.
Was fehlt mir?
Dank
GELÖST
Mein Problem war, dass ich zweimal mein ConfigService wurde injiziert wird. Im Bootstrap der Anwendung und in der Datei, in der ich sie verwende.
Ich habe die providers
Einstellung entfernt und es hat funktioniert!
Als eine Nebenbemerkung, ziehen Sie in Betracht, die Serviceaufrufe aus dem Konstruktor zu verschieben. – Stanislasdrg
http://www.angulartutorial.net/2017/09/angular-share-data-between-components.html – Prashobh