Angular2服务和良好做法
我对angular2这个世界相当陌生,正在寻找做一些事情的最佳方式 其中之一是:查询Http端点的服务的最佳初始值是什么 考虑以下代码:Angular2服务和良好做法,angular,service,Angular,Service,我对angular2这个世界相当陌生,正在寻找做一些事情的最佳方式 其中之一是:查询Http端点的服务的最佳初始值是什么 考虑以下代码: 从'@angular/core'导入{Injectable} 从'rxjs/Observable'导入{Observable} 从'rxjs/BehaviorSubject'导入{BehaviorSubject} @可注射() 导出类反服务{ 私有_计数器:BehaviorSubject=新的BehaviorSubject(0) 公共计数器:可观察=此。\ u
从'@angular/core'导入{Injectable}
从'rxjs/Observable'导入{Observable}
从'rxjs/BehaviorSubject'导入{BehaviorSubject}
@可注射()
导出类反服务{
私有_计数器:BehaviorSubject=新的BehaviorSubject(0)
公共计数器:可观察=此。\ u counter.asObservable()
构造函数(){
此._计数器。下一步(0)
}
公共地址(){
this.\u counter.next(this.\u counter.getValue()+1)
}
}
我可以这样使用它:
@组件({
选择器:“我的应用程序”,
模板:`
计数器值为{sconter.Counter | async}
加一
`,
})
导出类应用程序{
建造商(私人搜索中心:反服务){
}
增量(){
this.sCounter.addOne()
}
}
(c.f.本)
但很明显,有些服务会查询API以获取数据,而这正是我不确定该如何处理的地方
BehaviorSubject
需要一个初始值(这很好),该值将提供给其订阅者,但由于该服务在您要求之前不会查询任何内容,因此它的初始值不会达到预期值,可能会破坏用户界面
例如:
从'@angular/core'导入{Injectable}
从'rxjs/Observable'导入{Observable}
从'rxjs/BehaviorSubject'导入{BehaviorSubject}
@可注射()
导出类用户服务{
private _user:BehaviorSubject=新的BehaviorSubject({}作为用户)
public user:Observable=this.\u user.asObservable()
构造函数(http:http){}
公共用户(id){
this.http.get(`/user/${id}`).subscribe((user)=>{this.\u user.next(user)})
}
}
如您所见,当我第一次订阅此服务时,我将收到{}
(转换为用户),而不是真正的用户,这可能会导致问题
有什么好的模式可以遵循吗?我刚刚添加了一个
.filter
来只获取我想要的值,而且效果很好。:)
从'@angular/core'导入{Injectable}
从'rxjs/Observable'导入{Observable}
从'rxjs/BehaviorSubject'导入{BehaviorSubject}
@可注射()
导出类用户服务{
private _user:BehaviorSubject=新的BehaviorSubject({}作为用户)
public user:Observable=this.\u user.asObservable()
.filter(用户=>用户实例)
构造函数(http:http){}
公共用户(id){
this.http.get(`/user/${id}`).subscribe((user)=>{this.\u user.next(user)})
}
}
我刚刚添加了一个.filter
来只获取我想要的值,而且效果很好。:)
从'@angular/core'导入{Injectable}
从'rxjs/Observable'导入{Observable}
从'rxjs/BehaviorSubject'导入{BehaviorSubject}
@可注射()
导出类用户服务{
private _user:BehaviorSubject=新的BehaviorSubject({}作为用户)
public user:Observable=this.\u user.asObservable()
.filter(用户=>用户实例)
构造函数(http:http){}
公共用户(id){
this.http.get(`/user/${id}`).subscribe((user)=>{this.\u user.next(user)})
}
}