angular - 选择组件时忽略部分路由的角度路由
问题描述
我有一个应用程序模块,它通过这些定义的路由延迟加载其他几个模块:
appRoutes: Routes = [
{
path: 'campaign',
loadChildren: './campaign/campaign.module#CampaignModule'
},
{
path: 'analytics',
loadChildren: './analytics/analytics.module#AnalyticsModule'
},
// .... several other routes...
{
path: 'not-found',
component: NotFoundComponent
},
{
path: '**',
component: NotFoundComponent
}
];
现在,在分析路线中,我有这个:
analyticsRoutes: Routes = [
{
path: 'campaign',
component: CampaignsComponent
},
{
path: 'campaign/:campaignId',
component: CampaignComponent
}
// ... several other routes ...
];
最后是竞选路线:
campaignRoutes: Routes = [
{
path: '',
component: JourneyListComponent
},
{
path: 'journey',
component: JourneyListComponent
}
]
AppModule 中的路由被加载,RouterModule.forRoot(appRoutes, { onSameUrlNavigation: 'reload'})
AnalyticsModule/CampaignModule 中的路由被加载如下:RouterModule.forChild(<module>Routes)
路由在整个应用程序中完美运行,直到我添加了活动模块,该模块与分析/活动具有相似的路由,但根不同。
完整的分析路线(有效)是<site-url>/analytics/campaign
,完整的活动路线(无效)是<site-url>/campaign
。
当我进入活动/campaign
或campaign/journey
路线时,它会加载在路线 def for 中指定的组件/analytics/campaign
。目前,正确组件中唯一应该显示的是<h1>Hello World</h1>
如果我将延迟加载的campaign
路由更改为campaigns
(添加一个's'),使其与分析路由不匹配,它可以解决问题,但我不希望它在任何一个地方都是复数。
我尝试将 pathMatch 添加到所有路由(前缀和完整),但它并没有改变行为。
Package.json 部门:
"dependencies": {
"@angular/animations": "6.0.6",
"@angular/cdk": "^6.3.1",
"@angular/common": "6.0.6",
"@angular/compiler": "6.0.6",
"@angular/core": "6.0.6",
"@angular/forms": "6.0.6",
"@angular/http": "6.0.6",
"@angular/platform-browser": "6.0.6",
"@angular/platform-browser-dynamic": "6.0.6",
"@angular/router": "6.0.6",
"@stomp/ng2-stompjs": "^4.0.0",
"@swimlane/ngx-charts": "8.1.0",
"@swimlane/ngx-datatable": "13.0.1",
"@swimlane/ngx-ui": "21.1.2",
"core-js": "^2.5.7",
"d3": "^5.5.0",
"lodash": "^4.17.10",
"moment": "2.22.2",
"moment-mini": "2.22.1",
"moment-timezone": "^0.5.21",
"mydaterangepicker": "^4.2.1",
"ng-pick-datetime": "^6.0.7",
"ng-pick-datetime-moment": "^1.0.6",
"ng2-dragula": "1.5.0",
"ng2-stomp-service": "^1.2.2",
"ngx-monaco-editor": "^6.0.0",
"ngx-toastr": "^8.8.0",
"protractor": "^5.3.2",
"rxjs": "^6.2.1",
"rxjs-compat": "^6.2.1",
"rxjs-tslint": "^0.1.5",
"sockjs-client": "^1.1.5",
"stream": "0.0.2",
"timers": "^0.1.1",
"xml2js": "^0.4.19",
"zone.js": "^0.8.26"
}
解决方案
在评论中回答,给我那个代表。༼つ◕_◕༽つ</p>
如果您将带有路由的延迟加载模块错误地导入应用程序模块,则会发生这种情况。这重现了这个问题:stackblitz.com/edit/angular-yrmdaj
删除应用模块中的“AnalyticsModule”导入,它将不再中断。
推荐阅读
- r - 将行名转换为数据框中的新列
- javascript - 使用当前时间与数组进行比较并显示该范围内的信息
- r - 如何从R中的数据框列绘制网络图?
- reactjs - React-beautiful-dnd typescript 编译器问题
- javascript - 添加后不久如何在子集合中获取文档?
- php - Laravel 7 自定义登录
- typescript - 如何在没有 getter 和 setter 的情况下即时验证属性?
- xamarin - 从 Xamarin.Forms Webview 中的 javascript 调用 c# 函数
- intellij-idea - 如何修复:不支持的 Gauge 版本(空):此版本的 Gauge Intellij 插件仅适用于 Gauge 版本 >= 0.9.0
- sql - SequelizeDatabaseError:SQLITE_ERROR:没有这样的列:created_at