我是 Angular 2 的新手,如果这个问题很愚蠢,请原谅。
我必须从服务器获取数据并将其显示在组件中。服务器有一些 API 方法,所以我创建了api.service.ts
如下所示的方法:
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/catch';
const protocol = 'http';
const domain = 'mydomain.ng';
const port = ':4200';
@Injectable()
export class ApiService {
constructor(private http: HttpClient) { }
buildQuery(apiMethod: string) {
return `${protocol}://${domain}${port}/${apiMethod}`;
}
get(apiMethod: string): Observable<Response> {
const query = this.buildQuery(apiMethod);
return this.http.get<Response>(query)
.map(
resp => {
if (resp.ok) {
return resp;
} else { // Server returned an error
// here I need to show UI error in the component
}
}
)
.catch( // Error is on the client side
err => {
// here I need to show UI error in the component
}
);
}
getGeneralReport(): Observable<Response> {
return this.get('generalReport');
}
}
服务端 API 有很多方法,所以get()
方法是设计用来执行实际请求和处理常见错误的。然后我会有一些方法,比如getGeneralReport()
调用 get 方法,参数指定应该使用哪个 API 方法。
我还有一个组件,称为注入general.component.ts
位置:api.service
import { Component, OnInit } from '@angular/core';
import { ApiService } from '../../shared/api/api.service';
@Component({
selector: 'app-general',
templateUrl: './general.component.html',
styleUrls: ['./general.component.scss']
})
export class GeneralComponent implements OnInit {
generalInfo: Response;
constructor(private apiService: ApiService) { }
ngOnInit() {
this.apiService.getGeneralReport().subscribe(
data => {
this.generalInfo = data;
// Display the received data
}
);
}
}
将会有更多的组件,例如general.component
将使用api.service
. 现在我被卡住了,因为我需要在所有组件中弹出 UI 窗口,api.service
如果错误发生在api.service
. 有可能还是我应该使用一些不同的方法?