ng-docs.github.io icon indicating copy to clipboard operation
ng-docs.github.io copied to clipboard

关于http异步取值的问题

Open chinesesoule opened this issue 5 years ago • 16 comments

CICS GFO~F}K1QYZWFB_{_O 已经可以读出值来了但是控制台提示未获取到

chinesesoule avatar May 04 '19 00:05 chinesesoule

这个要怎么解决

chinesesoule avatar May 04 '19 00:05 chinesesoule

不放代码,不放请求.....谁知道是哪出的错

wszgrcy avatar May 04 '19 00:05 wszgrcy

(J{96ZGIIRFX5% WI N) }R 8ZURC2EOFH~D8_HO UCBWZ8 第一个service的代码,第二个是 component的代码

chinesesoule avatar May 04 '19 01:05 chinesesoule

不放代码,不放请求.....谁知道是哪出的错

(J{96ZGIIRFX5% WI N) }R 8ZURC2EOFH~D8_HO UCBWZ8 第一个service的代码,第二个是component的代码

chinesesoule avatar May 04 '19 01:05 chinesesoule

虽然.....你没放html的截图,但是我猜测,你的html中会有这样的一个插值表达式{{docs.info}}(或者是docs.xxx.xxx.info),那么你在类中这个属性是无定义的,所以说需要1.判断是不是请求成功在显示.2.或者说改写docs?.info这种.

wszgrcy avatar May 04 '19 02:05 wszgrcy

虽然.....你没放HTML的截图,但是我猜测,你的HTML中会有这样的一个插值表达式{{docs.info}}(或者是docs.xxx.xxx.info),那么你在类中这个属性是无定义的,所以说需要1判断是不是请求成功在显示0.2。或者说改写文档?.INFO这种。

你说的对我在html中的插值确实是{{ docs.info.title}}的方式,已经请求成功了,如果在html页面加上逻辑判断能不能解决这个问题,或者怎么在组件初始化之前给这个属性赋值,因为我现在已经重写了请求现在已经把get请求变成了一个纯同步的了浏览器的控制台已经不报错了,但是我感觉这种的方式并不好

chinesesoule avatar May 04 '19 02:05 chinesesoule

虽然.....你没放HTML的截图,但是我猜测,你的HTML中会有这样的一个插值表达式{{docs.info}}(或者是docs.xxx.xxx.info),那么你在类中这个属性是无定义的,所以说需要1判断是不是请求成功在显示0.2。或者说改写文档?.INFO这种。

你说的对我在html中的插值确实是{{ docs.info.title}}的方式,已经请求成功了,如果在html页面加上逻辑判断能不能解决这个问题,或者怎么在组件初始化之前给这个属性赋值,因为我现在已经重写了请求现在已经把get请求变成了一个纯同步的了浏览器的控制台已经不报错了,但是我感觉这种的方式并不好

  • 方法1.*ngIf
  • 方法2. 上面说的{{docs?.info}},具体?什么 意思看这里
  • 方法3. 路由上进行数据预请求(但是考虑到上面两种方法你都不知道,这个可能略难....)链接

wszgrcy avatar May 04 '19 03:05 wszgrcy

初学小白一枚。 感谢开发组的杰出贡献。我也有类似同样的问题,通过Http 异步获取的JSON数据,如果数据返回的数组对象result=[ {},{}]是可以直接ngFor 遍历数组,然后使用插值模板显示数据。 如果返回的是对象类型的,直接使用插值表达式控制台会报题主同样的错误。

这个是有什么区别吗?

takyee avatar May 21 '19 05:05 takyee

冒昧的打扰大家,可以帮我解答一下疑惑吗?

takyee avatar May 24 '19 10:05 takyee

@takyee 你的问题和题主的应该不是一回事,建议单开一个 issue。 简单来说,ngFor 只支持遍历数组,如果需要对对象类型进行处理,可以借助 https://angular.cn/api/common/KeyValuePipe

asnowwolf avatar May 24 '19 15:05 asnowwolf

@asnowwolf 感谢您的耐心回复,我会稍后重新开一个新的issue,可能是我没有描述清楚,我的问题同题主应该非常接近。

醍醐灌顶,ngFor只能遍历数组。

另外用http 获取到的JSON数据,封装相应的变量中,通过插值获取对象的属性值报错,如楼上wszgrcy教的方法:docs?.info,控制台就不会报错

takyee avatar May 25 '19 16:05 takyee

@takyee 我发现使用安全操作符会出现二次数据渲染建议使用路由的resolve

chinesesoule avatar May 25 '19 17:05 chinesesoule

@chinesesoule 感谢您的回复! 冒昧的问一下,我看你到你贴出来的ui截图,是否是使用了ng zorro, 其实也就是 html 模板要处理http异步获取过来的对象,较好的办法就是使用resolve来解决,我稍后来测试一下。 谢谢1

takyee avatar May 26 '19 10:05 takyee

@takyee 是的,我使用了ng zorro

chinesesoule avatar May 26 '19 12:05 chinesesoule

@chinesesoule 没涉及路由的时候resolve,该是如何实现。

希望您别烦我

takyee avatar May 27 '19 02:05 takyee

@takyee 如果没有牵扯到,路由你可以是试试oninit和安全操作符,其实我一直想让异步的方法变成同步的,结果好几次都失败了,如果异步的方法变成同步的话是不存在上述的问题

chinesesoule avatar May 29 '19 12:05 chinesesoule