Angular2组件无缘无故地重新加载两次

时间:2016-10-11 15:37:45

标签: angular angular-routing angular2-template

我在使用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)

3 个答案:

答案 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: [