使用我在网上找到的一些文档,我已经编写了一种保存一些数据的服务方法:
@Injectable
export class BrandService {
brands$: Observable<Brand[]>;
private _brandsObserver: Observer<Brand[]>;
private _dataStore: {
brands: Brand[]
};
constructor(private http: Http) {
this.brands$ = new Observable(observer => this._brandsObserver = observer).share();
this._dataStore = { brands: []};
}
saveBrand(brand: Brand) {
var headers = new Headers();
headers.append('Content-Type', 'application/json');
return this.http.post("http://localhost:8080/api/brands", JSON.stringify(brand), { headers: headers })
.map( (response: Response) => response.json()).subscribe(
data => {
this._dataStore.brands.push(data);
this._brandsObserver.next(this._dataStore.brands);
},
error => console.log("Could not create Brand"));
}
}
这允许我做的是将更新推送到我的品牌系列,我在视图上的表格会观察这些更改并自动更新,因此我不必手动刷新它。一切都与世隔绝。
我的问题是,由于我订阅了服务中的http.post
,我的组件现在无法知道此调用是否成功,这也意味着,因为我&#39;我在模态对话框中显示表单,我不知道是否应该关闭对话框或显示错误。我的组件只是这样做......
this._brandService.saveBrand(this.brandForm.value);
所以,我认为我应该找到一种方法来a)触发我在组件中监听的事件,以便当好/坏的事情发生时并采取相应的行动,或者b)数字以某种方式观察服务中的一些其他属性,我可以在检测到这些更改时对其进行操作。但我对所有这些可观察到的东西都很陌生,我甚至都不知道从哪里开始。
data => {
this._dataStore.brands.push(data);
this._brandsObserver.next(this._dataStore.brands);
// fire some success event or
// update some observed property
},
error => {
// fire some failure event or
// update some observed property
}
答案 0 :(得分:1)
您可以在呼叫站点subscribe()
进行
saveBrand(brand: Brand) {
var headers = new Headers();
headers.append('Content-Type', 'application/json');
return this.http.post("http://localhost:8080/api/brands", JSON.stringify(brand), { headers: headers })
.map( (response: Response) => response.json()).map(
data => {
this._dataStore.brands.push(data);
this._brandsObserver.next(this._dataStore.brands);
});
}
this._brandService.saveBrand(this.brandForm.value)
.subscribe(
value => onSuccess(),
error => onError());
如果您仍希望在saveBrand
中执行一些常规错误处理,则可以使用catch
运算符(如Intercepting errors and subscribing to中所使用的那样)