Angular 5 http调用不触发

时间:2018-12-18 07:28:38

标签: javascript angular api http

Http调用未触发。我写了关于订阅路由参数的电话。整个页面重新加载或第一次单击按钮更改路由时,都会触发呼叫。之后,该呼叫不会触发。我检查了chrome开发工具的网络安全时间。那里没有电话。

ngOnInit() {
    this.getSlider();
    this.route.params.subscribe(params => {
        this.route.queryParams.subscribe(qParams => {
            this.boxSlug = params.slug;
            if (qParams.box_standard) {
                if (qParams.box_standard === "previous") {

                    console.log('blah blah blah');

                    this.pageType = qParams.box_standard;
                    this.getPreviousBoxes(); //<---method that gets called
                } else if (qParams.box_standard === "box-detail") {
                    this.pageType = "box-detail";
                    this.boxFBIN = qParams.box;
                    this.getBoxDetail(qParams.box);
                } else {
                    this.pageType = "box";
                    if (params.slug && this.pageType === "box") {
                        this.boxSlug = params.slug;
                        this.getBoxTypes(params.slug);
                    }
                }
            } else {
                this.pageType = "box";
                if (params.slug) {
                    this.getBoxTypes(params.slug);
                } else {
                    this.router.navigate(["/box"]);
                }
            }
        });
    });
}

getPreviousBoxes() {
    this.boxService.getPreviousBoxes(this.boxSlug).subscribe(
        response => {

            console.log('preResp--->', response);

            this.previousBoxes = [];
            this.boxChunk = [];
            this.previousBoxes = response.data;
            while (this.previousBoxes.length > 0) {
                this.boxChunk.push(this.previousBoxes.splice(0, 4));
            }
        },
        error => {
            console.error(error.error.message);
        }
    );
}

这是我BoxService.service.ts中的http调用(不是完整代码)

import { HttpClient, HttpHeaders } from '@angular/common/http';

export class BoxService {

constructor(private _http: HttpClient) { }
private API_URL = environment.API_URL;
private headerDict = {
    'Content-Type': 'application/json',
    'Accept': 'application/json',
    'Access-Control-Allow-Headers': 'Content-Type'
};
private requestOptions = {
    headers: new HttpHeaders(this.headerDict)
};


getPreviousBoxes(boxSlug): Observable<any> {
    return this._http.get(this.API_URL + 'user/box/previous/' + boxSlug, this.requestOptions)
    .map(response => {

        console.log('bbbbbb====>', response);
        console.log('boxSlug====>', boxSlug);

        return response;
    }).catch(this.handleError);
}
}
在页面上重新加载

dev工具网络和控制台:

the api call and response

log of the response but array length is 0

如果我在不重新加载的情况下发起呼叫,则会发生以下情况(清除控制台和网络标签后):

no api call registers in network tab

but somehow i get a response and it gets logged in console

有人可以帮助我了解问题所在吗?

1 个答案:

答案 0 :(得分:0)

尝试以下方法。只需返回服务调用结果即可,而无需使用地图运算符。希望您正在使用HttpClientModule

getPreviousBoxes(boxSlug) {
    return this._http.get(this.API_URL + 'users/box/previous' + boxSlug,this.requestOptions);
  }