angular - 基于全局变量的动态路由
问题描述
我在一个角度工作区中有两个不同的项目。我想根据 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 这样的单独路径。
也尝试使用绝对路径和相对路径,但它不起作用
解决方案
唯一的方法是创建分隔路由数组并根据项目加载它们,但这样做的缺点是您应该在每次 window.id 更改时重新加载。
延迟加载模块应angular.json
使用绝对路径导入。前任:
"lazyModules": [
"projects/website/src/app/pages/module1",
"projects/website/src/app/pages/module2"
]
在你的路由器配置过程中,应该粘贴绝对路径而不是相对路径:
export const PROJECT1_ROUTES = [{
path: '/1',
loadchildren: 'projects/website/src/app/pages/module1#Module1'
}]
export const PROJECT2_ROUTES = [{
path: '*',
loadchildren: 'projects/website/src/app/pages/module2#Module2'
}]
var routes = [];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule]
})
export class AppRoutingModule {
constructor(
private router: Router
) {
const selectedProject = window.id === 1 ? true : false;
if(selectedProject) {
this.router.resetConfig(PROJECT1_ROUTES)
} else {
this.router.resetConfig(PROJECT2_ROUTES)
}
}
}
推荐阅读
- python - 是否可以从其他笔记本复制和粘贴 Jupyter Notebook 单元格并让新笔记本能够调用声明的变量?
- flutter - Mi android manifest.xml no reconoce los permisos
- kubernetes - 如何强制所有 kubernetes 服务(代理、kublet、apiserver...、容器)将日志写入 /var/logs
- marklogic - Forest Meters 启动时出错:XDMP-BADSTARTUPTOKEN:Forest Meters 的启动令牌错误
- apache - Xampp Apache 无法在 Win 10 上启动
- java - 自 Java 9 以来更改了 Swing TitledBorder 的外观
- html - 如何在手机上使网页中的文字变大?
- azure - Azure 应用服务无法访问注册表中的映像
- jenkins - 重新运行机器人框架,直到所有测试用例都通过 - Jenkins Pipeline
- amazon-web-services - 如何为 aws sam template.yaml 中的 lambda 函数提供 SQS 列表队列策略?