在我们的Angular2 Typescript应用程序中,我们使用路由器。
我们的组件非常通用,并且它们的行为基于从路由器获取的参数而发生巨大变化。
该应用程序处于早期开发阶段,我所指的行为是最近观察到的。 我不确定这是因为代码的更改还是因为库中出现了破坏性变化。
考虑一个名为“List”的组件。它从上下文(路由、包装组件等)获取一些信息,例如它应显示的实体类型。
现在,当我更改路由时,“List”组件不会重新实例化,但其参数会更新。由于我在 “ngOnInit” 中使用这些参数来设置组件,后面的更改将没有任何效果。
我知道我可以使用更改检测来解决此问题,但我不想这样做。原因是这将使开发人员更容易引入回归错误(例如:转到People列表,然后执行某些操作,转到Orders列表,出现不应该存在的内容),这些错误更难以发现、测试和复制。它们更有可能泄漏到生产环境中。
如何在路由更改时强制Angular重新创建List组件。
更多观察结果:在路由器中,如果我导航到不显示List组件的路由,然后返回List,该组件将被重新实例化。
该应用程序处于早期开发阶段,我所指的行为是最近观察到的。 我不确定这是因为代码的更改还是因为库中出现了破坏性变化。
考虑一个名为“List”的组件。它从上下文(路由、包装组件等)获取一些信息,例如它应显示的实体类型。
现在,当我更改路由时,“List”组件不会重新实例化,但其参数会更新。由于我在 “ngOnInit” 中使用这些参数来设置组件,后面的更改将没有任何效果。
我知道我可以使用更改检测来解决此问题,但我不想这样做。原因是这将使开发人员更容易引入回归错误(例如:转到People列表,然后执行某些操作,转到Orders列表,出现不应该存在的内容),这些错误更难以发现、测试和复制。它们更有可能泄漏到生产环境中。
如何在路由更改时强制Angular重新创建List组件。
更多观察结果:在路由器中,如果我导航到不显示List组件的路由,然后返回List,该组件将被重新实例化。
routerCanReuse
,但不确定它现在怎么样了...似乎在路由器3.x中没有实现,可以查看https://github.com/angular/angular/issues/9811 - Sasxa