以角度

时间:2017-12-14 08:51:25

标签: angular angular-services angular-http

我是Angular的新手,我为每个组件创建了服务。该服务用于从服务器获取数据。

在我的客户没有告诉我离线保存请求并稍后同步之前,一切正常。

现在,我创建了一个公共服务,它将访问服务器并获取数据,而不是现有的组件附加服务。

我想知道这是否会对项目中的任何事情产生影响。

如果这种方法没问题,那么我将检查CommonRequestService中的网络连接,并将请求保存在数据库中。

请检查以下代码并还原。我会非常感激的。

旧工程师状态服务

export class engineerStatusService {
    constructor(public http: Http) {}
    // Post data to the server if user update the status
    post(path: string, body: Object = {}): Observable < any > {
        let headers = new Headers({
            'Content-Type': 'application/x-www-form-urlencoded',
            'authorization': 'Bearer ' + localStorage.getItem('token')
        });
        let options = new RequestOptions({
            headers: headers
        });
        let data = body;
        let urlSearchParams = new URLSearchParams();
        for (var key in body) {
            urlSearchParams.append(key, body[key]);
        }

        let bodyData = urlSearchParams.toString();
        return this.http.post(`${API_URL}${path}`, bodyData, options)
            .map(response => response.json());
    }
}

更新了工程师状态服务

这里使用了CommonRequestService。

export class engineerStatusService {
    constructor(private commonRequestService: CommonRequestService) {}
    // Post data to the server if user update the status
    post(path: string, body: Object = {}): Observable < Response > {
        let data = body;
        let urlSearchParams = new URLSearchParams();
        for (var key in body) {
            urlSearchParams.append(key, body[key]);
        }
        let bodyData = urlSearchParams.toString();
        return this.commonRequestService.post(path, bodyData)
            .map(response => response.json())
    }
}

CommonRequestService

export class CommonRequestService {
    constructor(private http: Http) {}
    post(path: string, body: Object = {}): Observable < Response > {
        let headers = new Headers({
            'Content-Type': 'application/x-www-form-urlencoded',
            'authorization': 'Bearer ' + localStorage.getItem('token')
        });
        let options = new RequestOptions({
            headers: headers
        });
        return this.http.post(`${API_URL}${path}`, body, options)
    }
}

工程师状态组件

updateStatus(data) {
    this.engineerStatusService
        .post('status', data)
        .subscribe(data => {
            console.log(JSON.stringify(data));
        }, error => {
            console.log('Error occured =>', error);
        })
}

1 个答案:

答案 0 :(得分:0)

既然你已经做过了,我猜你只需要支持,对吗?

因为如果您愿意再次这样做,这里有两条线索:

1 - 最新浏览器上的service workers非常强大

2 - Http Interceptors,可以捕获您提出的每个请求,并在处理它们之前执行某些操作。这是我向您推荐的解决方案:它功能强大,内置,并且需要较少量的代码。