Угловая маршрутизация, игнорирующая части маршрута при выборе компонента - PullRequest
0 голосов
/ 30 августа 2018

У меня есть модуль приложения, который лениво загружает несколько других модулей по этим заданным маршрутам:

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 маршрута для /analytics/campaign. В настоящее время единственное, что должно отображаться в правильном компоненте - это <h1>Hello World</h1>

Если я изменил ленивый загруженный маршрут campaign на campaigns (добавив 's'), чтобы он не соответствовал маршруту аналитики, это исправит проблему, но я не хочу, чтобы во множественном числе в любом месте.

Я попытался добавить pathMatch ко всем маршрутам (как префиксным, так и полным), но это не изменило поведение.

Package.json deps:

"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"
}

1 Ответ

0 голосов
/ 03 сентября 2018

Ответил в комментариях, подари мне эту репутацию. (つ ◕_◕) つ

Это происходит, если вы импортируете лениво загруженные модули с маршрутами по ошибке в модуль приложения. Это воспроизводит проблему: stackblitz.com / edit / angular-yrmdaj

Удалите импорт «AnalyticsModule» в модуле приложения, и он больше не будет прерываться.

...