Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 条件路由在角度应用程序中不起作用_Javascript_Angular_Module_Conditional Statements_Router - Fatal编程技术网

Javascript 条件路由在角度应用程序中不起作用

Javascript 条件路由在角度应用程序中不起作用,javascript,angular,module,conditional-statements,router,Javascript,Angular,Module,Conditional Statements,Router,在我的angular项目中的dev build中,在子模块的路由文件中,我正在执行如下操作: const routes = window.innerWidth > 768 ? desktopRoutes: mobileRoutes; 然后我将这些路由传递到RouterModule.forChild(路由) dev构建就像一个魔咒,然而,当我创建一个prod构建并部署它时,这个东西无法工作,只加载mobileRoutes,而不管屏幕分辨率如何 欢迎提出我应该研究的任何建议或替代方案 注意:

在我的angular项目中的dev build中,在子模块的路由文件中,我正在执行如下操作:

const routes = window.innerWidth > 768 ? desktopRoutes: mobileRoutes;
然后我将这些路由传递到
RouterModule.forChild(路由)

dev构建就像一个魔咒,然而,当我创建一个prod构建并部署它时,这个东西无法工作,只加载mobileRoutes,而不管屏幕分辨率如何

欢迎提出我应该研究的任何建议或替代方案


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

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

有一些变通办法

  • 使用
    路由器
    :您应将新配置作为参数传递,如文档中所述,仅更改所需的路由

  • 使用防护装置



  • 是否尝试在本地重建应用程序env prd?是的,我不知道angular的很多经验,但是,我相信应用程序在哪里初始化。我猜它是ngOnInit()你可以计算出那里的宽度,然后保存在一些服务或其他东西中。然后在注册路由的位置使用我认为使用resetconfig将重置整个路由器,但是如果我只想更改/切换功能模块中的路由,应该怎么做?否,因为您应该将新配置作为参数传递,只更改所需的路由。检查这个
    canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
      if( window.innerWidth > 768 ){
        return true; // return desktopRoute
      }
    
      this.router.navigate(['main/']);  // mobileRoute
      return false;
    }