0
我有一個服務僅在我的appModule中被列爲提供者。它不在我應用程序中的任何其他地方的提供程序列表中。我在服務中設置的任何屬性始終未定義,只要我離開使用該組件的位置並返回。這是我的服務...Angular 2:Singleton Services - 屬性沒有記住?
LookupsService.ts
import {Injectable, OnInit} from '@angular/core';
import {Observable} from 'rxjs/Observable';
import {Http, Response} from "@angular/http";
import {environment} from "../environments/environment";
import {Lookups} from "./lookups.model";
@Injectable()
export class LookupService {
private baseUrl: string;
private lookups: Lookups;
constructor(private http: Http) {
this.baseUrl = `${environment.epiApiUrl}/lookups`;
}
getAll(): Observable<Lookups> {
// we should only hit the database to get all the lookups once
if (this.lookups) { // <-- this.lookups is ALWAYS undefined
return Observable.of(this.lookups);
}
else {
return this.http.get(`${this.baseUrl}`)
.map(this.extractData);
}
}
extractData(response: Response) {
let responseBody = response.json();
this.lookups = <Lookups>responseBody.data; // <--why isn't this remembered?
return this.lookups;
}
}
我目前唯一一個組件中使用該服務...
@Component({
selector: 'addresses',
templateUrl: './addresses.component.html',
styleUrls: ['./addresses.component.less']
})
export class AddressesComponent implements OnInit {
@Input() user;
addressTypes: IdValue[] = [];
constructor(private lookupService: LookupService) { }
ngOnInit() {
this.lookupService.getAll()
.subscribe((lookups) => {
this.addressTypes = lookups.addressTypes;
});
}
}
每當我更改爲不同的路線,回來,服務每次都必須從api請求查找,因爲this.lookups總是未定義的。 LookupsService構造函數不會再被調用,但查找屬性總是未定義的。
謝謝,這正是它。我知道這一定是我錯過的一些愚蠢的東西。我完全失去了我的這種約束力。 –