Ich arbeite an Angular 5 Singleton Service. Meiner Meinung nach habe ich alles nach Leitlinie gemacht, leider ist mein Service kein Singleton. Jede Komponente scheint sich auf der Dienstinstanz zu befinden. Mein Code sieht wie folgt aus:Angular 5 Service Als Singleton
App Modul:
import { StarService } from './star-service/star-service'
import { StarSearchComponent } from './star-search/star-search.component'
import { StarReportComponent } from './star-report/star-report.component';
@NgModule({
imports: [
BrowserModule,
FormsModule,
AppRoutingModule
],
declarations: [
AppComponent,
StarSearchComponent,
StarReportComponent
],
providers: [StarService
],
bootstrap: [AppComponent]
})
export class AppModule {
}
Service:
import { Injectable } from '@angular/core';
import { log } from 'util';
@Injectable()
export class StarService {
public Param: string;
constructor() {
this.Param = "Not Set";
console.log("Service Instance created");
}
}
Stern-Bericht Component
import { Component, OnInit } from '@angular/core';
import { StarService } from '../star-service/star-service'
@Component({
selector: 'app-star-report',
templateUrl: '<p>{{getReport}}</p>',
styleUrls: ['./star-report.component.css']
})
export class StarReportComponent implements OnInit {
constructor(private starService: StarService) { }
ngOnInit() {
this.starService.Param = "Report";
}
get getReport(): string
{
return this.starService.Param;
}
}
Star Search Component
import { Component, OnInit } from '@angular/core';
import { StarService } from '../star-service/star-service'
@Component({
selector: 'app-star-search',
templateUrl: './star-search.component.html',
styleUrls: ['./star-search.component.css']
})
export class StarSearchComponent implements OnInit {
constructor(private starService: StarService) { }
ngOnInit() {
}
get getSearch(): string
{
return this.starService.Param;
}
}
Und nun, meine Konsole zeigt "Service-Instanz erstellt" jedes Mal, wenn ich bin Schaltkomponente. Außerdem zeigt jede Komponente falschen Text an. Ich glaube, wenn StarReportComponent erstellt wird, wechselt es starService.Param = "Report" und es soll dort bleiben. Leider, wenn StarSearchComponent aufgerufen wird, zeigt es standardmäßig "Nicht festgelegt" an. Warum? Warum Singleton hier nicht funktioniert? Danke
Ich kann dies nicht mit Ihrem Beispielcode reproduzieren: https://stackblitz.com/edit/angular-mwxab5?file=app%2Fapp.component.ts –
Danke, ich sehe, dass Sie beide Komponenten in der gleichen erstellen Zeit: app-star-report> app-star-search>. Ich wechsle eher zwischen ihnen durch das Routing. Macht es einen Unterschied? –
Shark