当服务功能在 angular 内完成时通知组件
Notify component when service function is complete in angular
我正在编写一个向后端执行 http 查询的服务:
getPlacesForUser(){
this.http.get("http://localhost:8080/processPlaces")
.map(res => res.text())
.subscribe(
data => this.result = data,
err => this.logError(err),
() => console.log('Places Request completed')
)
}
现在我想更新组件端,如果请求完成:
processPlaces(){
this._backendService.getPlacesForUser();
}
如何在组件和服务之间进行通信?
此外,我还在寻找最佳实践。
事实上,您可以直接从 getPlacesForUser
方法 return observble 并在其上附加一个订阅方法。
服务
getPlacesForUser(){
return this.http.get("http://localhost:8080/processPlaces")
.map(res => res.text());
}
组件
processPlaces(){
this._backendService.getPlacesForUser()
.subscribe(
data => this.result = data,
err => this.logError(err),
() => console.log('Places Request completed')
);
}
result
属性对应的是你可以在组件中使用的组件的一个属性。
您会注意到 async
管道可用于直接利用表达式中的 observable(例如在 ngFor
表达式中)。
我认为这个答案可以帮助您:。
希望对你有帮助,
蒂埃里
还有另一种方法可以使用 Rxjs 框架调用每个组件的数据,确保服务对所有组件都是可重用的,所以尽可能多地在服务中编写代码并仅在组件中订阅:
服务
import { Injectable } from 'angular2/core';
import { Http } from 'angular2/http';
import { Result} from './models/result'; // model imported
import { BehaviorSubject } from 'rxjs/BehaviorSubject';
@Injectable()
export class Service {
private _result: Result[];
constructor(private http: Http) {
this.result$ = new BehaviorSubject<Result[]>(this._result)
}
result$: BehaviorSubject<Result[]>;
private _urlGet = '/api';
getPlacesForUser(): void{
this.http.get(this._urlGet)
.map(res => JSON.parse(res.text()))
.catch(error => console.log(error))
.subscribe(result => {
this.result = result;
})
}
}
组件
constructor(private _service: Service)
ngOnInit(): any {
this._service.result$.map(result => result.filter(res =>
res.id)).subscribe(
result => this.result = result); // map is optional to filter json
}
我正在编写一个向后端执行 http 查询的服务:
getPlacesForUser(){
this.http.get("http://localhost:8080/processPlaces")
.map(res => res.text())
.subscribe(
data => this.result = data,
err => this.logError(err),
() => console.log('Places Request completed')
)
}
现在我想更新组件端,如果请求完成:
processPlaces(){
this._backendService.getPlacesForUser();
}
如何在组件和服务之间进行通信?
此外,我还在寻找最佳实践。
事实上,您可以直接从 getPlacesForUser
方法 return observble 并在其上附加一个订阅方法。
服务
getPlacesForUser(){ return this.http.get("http://localhost:8080/processPlaces") .map(res => res.text()); }
组件
processPlaces(){ this._backendService.getPlacesForUser() .subscribe( data => this.result = data, err => this.logError(err), () => console.log('Places Request completed') ); }
result
属性对应的是你可以在组件中使用的组件的一个属性。
您会注意到 async
管道可用于直接利用表达式中的 observable(例如在 ngFor
表达式中)。
我认为这个答案可以帮助您:
希望对你有帮助, 蒂埃里
还有另一种方法可以使用 Rxjs 框架调用每个组件的数据,确保服务对所有组件都是可重用的,所以尽可能多地在服务中编写代码并仅在组件中订阅:
服务
import { Injectable } from 'angular2/core';
import { Http } from 'angular2/http';
import { Result} from './models/result'; // model imported
import { BehaviorSubject } from 'rxjs/BehaviorSubject';
@Injectable()
export class Service {
private _result: Result[];
constructor(private http: Http) {
this.result$ = new BehaviorSubject<Result[]>(this._result)
}
result$: BehaviorSubject<Result[]>;
private _urlGet = '/api';
getPlacesForUser(): void{
this.http.get(this._urlGet)
.map(res => JSON.parse(res.text()))
.catch(error => console.log(error))
.subscribe(result => {
this.result = result;
})
}
}
组件
constructor(private _service: Service)
ngOnInit(): any {
this._service.result$.map(result => result.filter(res =>
res.id)).subscribe(
result => this.result = result); // map is optional to filter json
}