Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asynchronous 异步访问Angular2中已解析的数据_Asynchronous_Angular_Routes_Resolver - Fatal编程技术网

Asynchronous 异步访问Angular2中已解析的数据

Asynchronous 异步访问Angular2中已解析的数据,asynchronous,angular,routes,resolver,Asynchronous,Angular,Routes,Resolver,我对路由的解析器有点困惑。解析程序为我解决的问题是,在渲染时组件中存在一个对象。如果我不使用解析器,而是通过Promise在组件的构造函数中获取对象,访问其在模板中的嵌套属性,如 {{myObj.foo.bar}} 如果承诺没有尽早解决,则可能导致错误,这在需要执行http请求时很可能发生。然而,关于从解析器接收解析对象的一点信息告诉我在组件的构造函数中这样做 this.route.data.subscribe(val => {...}); 这不是和以前一样吗?好的,我承认,后端请求已

我对
路由的
解析器
有点困惑。解析程序为我解决的问题是,在渲染时组件中存在一个对象。如果我不使用解析器,而是通过Promise在组件的构造函数中获取对象,访问其在模板中的嵌套属性,如

{{myObj.foo.bar}}
如果承诺没有尽早解决,则可能导致错误,这在需要执行http请求时很可能发生。然而,关于从解析器接收解析对象的一点信息告诉我在组件的构造函数中这样做

this.route.data.subscribe(val => {...});
这不是和以前一样吗?好的,我承认,后端请求已经完成,我很快就会收到订阅。然而,我再次异步访问解析的数据。在模板呈现时{{myObj.foo.bar}}很有可能是可访问的,但是没有保证,不是吗

我不知道我是否认为这太关键了。不过,我的直觉是,对路由使用
canActivate
,并将已解析的对象设置为服务,而该服务反过来又可以由任何组件同步访问,这更接近我的意图


期待澄清

*ngIf
包装需要访问
myObj
的整个模板或部分:

<ng-container *ngIf="myObj?.foo">
  {{myObj.foo.bar}}
</ng-container>

{{myObj.foo.bar}

无法保证它何时到达,只需使用安全检查
myObj?.foo.bar
,当值最终到达时,它将重新启动。这是我想要避免的。在我的模板中使用几十个“?”运算符。何况??运算符表示对象是可选的。但是,在用户的配置文件页面上,他的电话号码可能是可选的,但用户对象不是可选的,而是必需的。这将解决?s的多重性(并将在HTML中添加一个额外的节点)。尽管如此,我不认为通过
主题
访问数据的目的,因为该主题已经被获取,并且可以直接访问。也许我有点太固执了,但“滥用”作为解析器的保护模式,将数据注入服务对我来说更有意义,至少在我的特定用例中是这样。无论如何,谢谢。
没有添加到DOM中(与
相同)。它是一个helper元素,允许使用与其他元素相同的语法添加结构指令(与需要不同sytax的
相反)。当然,解析器也很好。我更喜欢
*ngIf
,因为它的代码更少,但也取决于具体的用例。这符合betterOh,另一个未记录的特性:)。谢谢你提起这件事。我仍然不完全相信,但这绝对是一个选择。
是最近添加的。