这不会访问http响应对象:对象

时间:2017-12-12 12:00:57

标签: javascript angular typescript ecmascript-6

我有响应对象,我刚刚分配给“this”对象。

private data: Object = {};

this.http.post('url', { })
    .subscribe(
        res => {
            console.log(res);
            this.data = res;

            if(this.data.datacentersinfo.length) {}

...

如果我访问datacentersinfo对象,则表示对象类型上不存在属性datacentersinfo。由于此错误,我无法生成dist文件夹。

3 个答案:

答案 0 :(得分:3)

您有几种解决方案:

1 - 将数据输入任何数据并且不进行实例化:

private data: any;

2 - 改变你的状况:

if(this.data && this.data.datacentersinfo && this.data.datacentersinfo.length) {}

这可以解决您的问题。

答案 1 :(得分:2)

我建议您使用强类型对象,并执行以下操作

public static void setSearchTextHighlightSimpleHtml(TextView textView, String fullText, String searchText) {
    searchText = searchText.replace("'", "");
    try {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            fullText = fullText.replaceAll("(?i)(" + searchText + ")", "<span style=\"background-color:#FCFF48;\"><b><big><font color='#a10901'>$1</font></big></b></span>");
            textView.setText(Html.fromHtml(fullText, Html.FROM_HTML_MODE_LEGACY), TextView.BufferType.SPANNABLE);
        } else {
            fullText = fullText.replaceAll("(?i)(" + searchText + ")", "<b><big><font color='red'>$1</font></big></b>");
            textView.setText(Html.fromHtml(fullText), TextView.BufferType.SPANNABLE);
        }
    } catch (Exception e) {
        textView.setText(fullText);
    }
}

答案 2 :(得分:1)

我会发布两种方法来做到这一点。首先是旧的方式(看起来你正在尝试这样做),然后是使用HTTP客户端的首选方式

旧HTTP

private data: Object = {};
this.http.post('url', { })
    .map((res: Response) => res.json())
    .subscribe((res:any) => {
        console.log(res);
        this.data = res;
        if(this.data.datacentersinfo.length) {}
});

HTTP客户端

private data: Object = {};
    this.http.post<any>('url', { })            
        .subscribe((res:any) => {
            console.log(res);
            this.data = res;
            if(this.data.datacentersinfo.length) {}
    });

我不是这样做的最佳方式,你应该创建一个处理HTTP请求的服务组件,然后从组件中调用该服务并在那里订阅它的响应。