我有一个两难的问题要解决。从最佳架构实践和可维护性的角度来看,您认为最好的方法是什么?我们有模块A和模块B。模块B具有在应用程序中被重用的表单组件,特别是模块A。模块A必须路由到模块B的表单。由于太长的原因无法解释,相对路由不起作用。因此,当您取消或保存表单时,它会将您带到父B。这适用于用户从B路由的情况,而不是从A路由的情况。我们希望用户返回到他们以前所在的页面。
解决方案1:将表单组件分解成一个单独的模块C。因为它是一个可重用的组件,所以它应该有自己的模块。A路线到C,B路线到C,相对路线会带他们回来。缺点:大量代码更改。
解决方案2:在查询参数中传递父对象的变量。表单将读取查询参数,并在保存或取消后知道路由到哪里,不必担心相关路由。例如:www.example.com/products/product-id-1?redirectRoute=products-page
缺点:有许多要添加查询参数的链接,因此也有相当多的代码更改。我们不能在查询参数中使用正斜杠,所以我们必须使用一个变量。此外,我们现在只有A和B使用表单,但是如果将来我们有模块D和F,我们将需要为这个变量创建枚举。
解决方案3:尝试修复现有的相对路由。这可能是不可能的。
发布于 2021-10-18 11:32:46
是否需要创建相对路由?您不能在A中使用/path/to/moduleB?
当我构建我的路线时,我总是考虑这些路线之间的关系。因此,如果模块A中的表单和模块B中的表单以某种方式相关,那么可能会有另一个表单,您将如何处理它?我会使用这个模块C,它包含这些表单的域逻辑,并可能创建一个负责管理表单状态的状态/服务。为了单一责任原则,我会走那条路。
编辑:我认为你的导航功能可能有误。如果你想相对导航,你应该考虑像这样的代码
constructor(private route: ActivatedRoute, private router: Router)
...
navigateBack() {
this.router.navigate(['../../form'], {relativeTo: this.route})
}
发布于 2021-10-18 13:15:12
使用state是最好的解决方案,也是您可以用来管理表单及其相应组件的所有路由的最佳解决方案。通过这些操作,您可以传递下一个路由或前一个路由,并在该状态中路由您的应用程序。
此外,您应该考虑将表单放在一个共享模块中,这样可以使您的代码更整洁,更易于其他开发人员阅读、理解和构建
https://stackoverflow.com/questions/69621089
复制相似问题