我正在使用角度6
我有一个名为“ UserService”的服务,该服务具有一个名为“ getUserInfo()”的方法,该方法从服务器获取一些用户数据并将其保存。
有几个组件可以调用此方法,但是我希望我的服务在第一次没有用户信息的情况下发出HTTP请求,而对于其他“ getUserInfo()”调用,它应该提供能够已从服务器中获取。
实施此最佳方法是什么?
答案 0 :(得分:0)
您可以简单地将信息保存在服务的属性中,并在可用时提供信息。看一下下面的代码。
import { Restangular } from 'ngx-restangular';
import { of } from 'rxjs';
export interface UserInfo {
name: string;
email: string;
}
@Injectable({
providedIn: 'root' // for angular 6
})
export class UserService
userInfo: UserInfo;
constructor(private: rest: Restangular) {}
getUserInfo(): Observable<UserInfo> {
if (this.userInfo) {
return of(this.userInfo);
}
return this.rest
.one('/userInfo/')
.get()
.pipe(
map<UserInfo, UserInfo>(data => {
this.userInfo = data;
return data;
})
);
}
}
请注意:
of
是rxjs 5中Observable
的一种方法,现在已成为函数(在rxjs 6中)。rest
来自ngx-restangular of(this.userInfo)
而不是this.userInfo
的原因是,您将预订此方法,因此该方法必须返回一个Observable。of
等同于下面的代码:return new Observable(observer => {
observer.next(this.userInfo);
observer.complete();
return { unsubscribe() {} };
});