【发布时间】:2020-03-12 08:20:43
【问题描述】:
我认为这是我做错了,但我不知道是什么。我想在我的 Angular Web 组件中进行路由,我可以让路由工作。但是,如果我使用解析器,路由插座中使用的组件将无法正常工作。事件没有触发!
或者至少...如果您从应用程序中的另一条路线导航到此路线,它们会触发,例如,从 myWebsite.com/#/ 转到 myWebsite.com/#/myRoute/myParameter 工作正常,解析器获取数据并按预期触发所有事件。但是,如果我在此路由上按刷新或尝试将 URL (myWebsite.com/#/myRoute/myParameter) 直接粘贴到组件呈现的新选项卡/浏览器中,则调用构造函数,但不会触发任何事件!
仅当我添加解析器时才会发生这种情况。如果我删除解析器并在每个生命周期事件中添加一个 console.log,它们每次都可以工作!有什么我可以配置不同的吗?这是一个错误吗?
或者有没有一种方法可以让我从 API 获取数据,强制事件等待,从而绕过对解析器的需求。我需要在组件尝试呈现之前的数据,因为表单是动态的 - 所有表单问题都来自该 API 调用。我已经尝试通过订阅它来调用 ngOninit 和构造函数中的服务方法,但是它会在所有事件触发后获取数据并且我只有一个空白表单。
谢谢!
【问题讨论】:
-
您能告诉我您在哪里使用解析器 AppComponent 或服务吗?如果您在服务中使用解析器,最好这样做,并且您必须在路由器中添加
resolver:{cres: yourResolverSrvice}。 -
如果我做对了,您的要求是每当您的 API 响应返回时构建表单?
-
不幸的是,它似乎不仅仅是解析器。似乎变化检测在角度元素中无法正常工作。 github.com/angular/angular/issues/24181
-
@Abhishek 解析器是一个标准的可注入解析器,然后我在路由器中添加了 ,resolver {data: myResolver} 正如你所说的。相反,我决定只订阅 ngOnInit 中的 oberable。这有效,但如果您刷新页面,它就不起作用。出于某种原因,如果您这样做,更改检测会中断