【问题标题】:Angular 5 http call not firingAngular 5 http调用未触发
【发布时间】:2018-12-18 07:28:38
【问题描述】:

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);
}
}

页面重新加载时的开发工具网络和控制台:

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

谁能帮我理解问题所在?

【问题讨论】:

  • 你有对ngOninit()的API调用?
  • @Abhishek 是的。我订阅了它的 queryParams。有什么问题吗?
  • 请避免引用图片。相反,参考代码,很难跟踪正在发生的事情。也就是说,在您的回调中,改为使用return response.data
  • 请随意粘贴相关代码而不是图片!

标签: javascript angular api http


【解决方案1】:

试试下面的方法。只需返回服务调用结果而不使用 map 运算符。希望,您正在使用 HttpClientModule

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

【讨论】:

  • 这不起作用。得到相同的反应和情况。我只是想不通为什么没有调用被触发但得到响应。
  • 没有没有
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-18
  • 1970-01-01
  • 1970-01-01
  • 2020-10-08
  • 1970-01-01
  • 2021-12-23
  • 1970-01-01
相关资源
最近更新 更多