Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular2服务和良好做法_Angular_Service - Fatal编程技术网

Angular2服务和良好做法

Angular2服务和良好做法,angular,service,Angular,Service,我对angular2这个世界相当陌生,正在寻找做一些事情的最佳方式 其中之一是:查询Http端点的服务的最佳初始值是什么 考虑以下代码: 从'@angular/core'导入{Injectable} 从'rxjs/Observable'导入{Observable} 从'rxjs/BehaviorSubject'导入{BehaviorSubject} @可注射() 导出类反服务{ 私有_计数器:BehaviorSubject=新的BehaviorSubject(0) 公共计数器:可观察=此。\ u

我对angular2这个世界相当陌生,正在寻找做一些事情的最佳方式

其中之一是:查询Http端点的服务的最佳初始值是什么

考虑以下代码:

从'@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)})
}
}