【发布时间】:2018-02-14 11:25:56
【问题描述】:
我有一个“HomeComponent”,它在 UI 中显示用户名。
使用服务从 json 文件中读取用户名。
我在 AppComponent(HomeComponent 的父级)中提供服务并在 HomeComponent 中重用
AppComponent.html
<router-outlet></router-outlet>
AppComponent.ts
export class AppComponent {
constructor(private userService: UserService) {
this.userService.fetchUserDetails();
}
}
用户服务.ts
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { User } from '../models/user';
import 'rxjs/add/operator/first';
import 'rxjs/add/operator/toPromise';
@Injectable()
export class AppStateManagerService {
private userDetails: User;
private initializeUser(data) {
this.userDetails = new User();
this.userDetails.name = data.username;
this.userDetails.id = data.userid;
}
constructor(private http: HttpClient) {}
async fetchDeviceDetails() {
let response = await this.http
.get('./app/config/user.json')
.first()
.toPromise();
this.initializeUser(response);
return this.userDetails;
}
getUserDetails() {
return this.userDetails;
}
}
HomeComponent.html
<div>{{user && user.name}}</div>
HomeComponent.ts
export class HomeComponent {
user: User;
constructor(private userService: userService) {
this.user = this.userService.getUserDetails();
}
}
我这里遇到的问题是,HomeComponent首先被初始化,在JSON解析完成之前,也就是在AppComponent中fetchUserDetails()完成之前,调用HomeComponent中的getUserDetails()并且user.name为null HTML,在被填充到服务中之前。
有没有办法同步这个?不使用 Observable?
【问题讨论】:
-
会有些像 {{user.name | async}} 在这里没有帮助,为什么要解决,最好使用它
-
@RahulSingh,你能澄清一下你上面所说的吗?使用异步?
-
你返回一个 observable 并在视图中使用异步,这将减少你订阅 observable 的工作量
-
该方法所做的只是返回对您的列表的引用......所以这不应该很昂贵。它不是每次都从数据存储中重新检索它。它调用的是
getUserDetails()而不是fetchDeviceDetails()(这会更贵。)
标签: json angular angular-services angular-components