条件路由在 Angular 应用程序中不起作用

nob*_*alG 3 javascript router module conditional-statements angular

在我的 angular 项目的开发构建中,在子模块的路由文件中,我正在执行以下操作,

const routes = window.innerWidth > 768 ? desktopRoutes: mobileRoutes;
Run Code Online (Sandbox Code Playgroud)

然后我通过这些路线 RouterModule.forChild(routes)

开发构建就像一个魅力,但是,当我创建一个生产构建并部署它时,这件事无法工作并且只加载 mobileRoutes,而不管屏幕分辨率如何。

欢迎任何我应该考虑的建议或替代方案

注意:桌面路由组件扩展了移动组件,如果有帮助,只需添加信息!

geo*_*eos 6

这是因为在 prod 构建中,使用了 AOT(提前编译),预编译您的路由。因此,您的路由返回 false 值:mobileRoutes。

有一些解决方法

  1. 使用routerresetConfig(config)您应该将新配置作为参数传递,如resetConfig文档中所述,仅更改所需的路由。

  2. CanActivate 中使用守卫


canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
  if( window.innerWidth > 768 ){
    return true; // return desktopRoute
  }

  this.router.navigate(['main/']);  // mobileRoute
  return false;
}
Run Code Online (Sandbox Code Playgroud)