我在使用angular2 RC4应用程序,我开始注意到一些奇怪的东西。 我有一堆组件我可以路由到:
Parent(A) - ManyChildren(B,C,D,E)
我的组件A获取ID,与服务对话以获取项目并更新状态。其他组件听取状态" selectedItem"使用BehaviorSubjects。
path: ':id/steps',
当我尝试通过URL导航为一个全新的重新加载(新窗口)时,除了一些不可预测的行为外,一切正常。
当我尝试完全重新加载页面时(假设用户想要为页面添加书签),我将被路由到正确的页面并正确设置所有值。 但是,当我尝试导航到同一个树时,组件A重新加载。
我会去
localhost/items/1/steps/step1
Parent运行构造函数。当我去
localhost/items/1/steps/step2
Parent构造函数再次运行。这对我来说真是不可接受,因为我希望我的组件只被加载一次而且只有一次。我错过了什么?(RC4)
答案 0 :(得分:0)
我不知道这种行为的原因。真奇怪。 但正如文档在https://angular.io/docs/ts/latest/guide/lifecycle-hooks.html中所说,您应该将服务逻辑保留在ngOnInit()而不是构造函数中:
不要在组件构造函数中获取数据。在测试中创建或在您决定显示之前,您不必担心新组件会尝试联系远程服务器。构造函数只需将初始局部变量设置为简单值即可。
我不知道它是否能解决你的问题。试一试,告诉我们。
答案 1 :(得分:0)
此处Why does my angular2 app initialize twice?其他用户具有相同的行为,因为他将AppComponent配置为默认路由。也许你的问题与此类似?我们几乎没有什么信息可以理解和解决您的问题。
答案 2 :(得分:0)
过了一段时间我发现了错误。由于我们仍然在RC4,并且在我们建立构建系统时 - 我们已经使用WebPack设置了一些延迟加载。 无论出于何种原因,这都是导致重新加载的原因。
path: 'clients',
component: 'ClientsComponent',
//canActivate: [WebpackAsyncRoute], << THIS LINE // Async components with children routes must use WebpackAsyncRoute
children: [