基于全局变量的动态路由

时间:2019-02-27 04:42:32

标签: angular angular6 angular-routing

我在一个角形工作区中有两个不同的项目。我想基于app.routing.ts中的全局变量动态更改路线

这是我的应用程序路由模块:

import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';

const project1 = {
 path: '',
 loadchildren: '../module1#module1'
};

const project 2 = {
 path: '',
 loadchildren: '../module2#module2'
};
const selectedProject = window.id === 1 ? project1 : project2;

const routes: Routes = [selectedProject];

@NgModule({
  imports: [RouterModule.forRoot(routes, {
  useHash: true,
    paramsInheritanceStrategy: 'always'
  })],
  exports: [RouterModule]
})
export class AppRoutingModule { }

它总是与第二个项目一起进行。

注意: 我想用空路径而不是像project1,project2这样的单独路径来加载它。

也尝试使用绝对路径和相对路径,但不起作用

2 个答案:

答案 0 :(得分:0)

它是创建单独的routes数组并根据项目加载它们的唯一方法,但是这样做的缺点是您应该在每个window.id更改时重新加载。

应使用绝对路径将延迟加载模块导入DataType(ElementType::TYPE2, 1)中。 e.x:

angular.json

在路由器配置期间,应粘贴绝对路径,而不是相对路径:

 "lazyModules": [
     "projects/website/src/app/pages/module1",
      "projects/website/src/app/pages/module2"
 ]

答案 1 :(得分:-1)

出于多种原因,您不能使用全局变量更改路由。

  • 路由使用浏览器的URL。
  • 可变范围,不寻找全局变量。
  • 您要在加载时分配“ selectedProject”,并且会在laod上对其进行评估并定义您的路线对象。

要使用路由在模块之间进行选择,请使用参数键或分配路由:

const project1 = {
 path: '/1',
 loadchildren: '../module1#module1'
};

const project 2 = {
 path: '*',
 loadchildren: '../module2#module2'
};

当然,您必须使用route & navigation