У меня есть следующие пути маршрутизации для модуля моего приложения Angular:
@NgModule({
imports: [
RouterModule.forChild([
{
path: 'documents',
data: { myObject: MyConstants.OPTION_ONE },
children: [
{
path: ':ID_DOC',
children: [
{ path: 'edit', component: EditDocumentComponent },
{ path: '', component: DocumentDetailsComponent },
]
},
{ path: 'add', component: AddDocumentComponent },
{ path: '', component: DocumentsListComponent }
]
}
])
],
exports: [
RouterModule
]
})
export class DocumentsManagementRoutingModule {
}
Как видите, я использую свойство data
для передачи некоторых данных по каждому пути в «документах», поэтому я могу получить их из любого из Компонентов, объявленных в путях маршрутизации:
Например, вот как я получаю данные в DocumentDetailsComponent
:
export class DocumentDetailsComponent implements OnDestroy {
private obsData: Subscription;
private option: any;
constructor(private route: ActivatedRoute) {
this.obsData = this.route.data.subscribe(data => {
this.option = data['myObject'];
});
}
ngOnDestroy(): void {
this.obsData.unsubscribe();
}
}
Теперь я изменил структуру маршрутизации всего приложения и вызываю указанный выше модуль из других модулей в режиме отложенной загрузки, используя атрибут loadChildren
. И данные передаю точно так же:
@NgModule({
imports: [
RouterModule.forChild([
{
path: 'users',
loadChildren: 'app/documents/documents.module#DocumentsModule',
data: { myObject: MyConstants.OPTION_ONE }},
{
path: ':ID_USER',
children: [
{ path: 'edit', component: EditUserComponent },
{ path: '', component: UserDetailsComponent },
]
},
{ path: 'add', component: AddUserComponent },
{ path: '', component: UserListComponent }
])
],
exports: [
RouterModule
]
})
export class UsersManagementRoutingModule {
}
И я сделал то же самое для всех других модулей, которые вызывают DocumentsManagementRoutingModule
, изменив свойство myObject
на MyConstants.OPTION_TWO
, MyConstants.OPTION_THREE
и так далее, в соответствии с моими потребностями.
Затем, поскольку я не знаю модуль и связанный с ним путь, который вызывает мой модуль отложенной загрузки, как получить свойство data
из модуля вызывающего абонента?
r.url.lastIndexOf("/"));
недопустима. - person e-cloud   schedule 13.07.2017UsersManagementRoutingModule
- person e-cloud   schedule 13.07.2017UsersManagementRoutingModule
- person e-cloud   schedule 13.07.2017loadChildren
иchildren
не следует использовать одновременно. Определите дочерние маршруты вDocumentsModule
, а затем удалите полеchildren
из маршрута'users'
вUsersManagementRoutingModule
. Если нет опечатки и вы хотели иметь здесь два отдельных маршрута, один сloadChildren
, а другой без ... - person Mike Hill   schedule 13.07.2017DocumentsManagementRoutingModule
? Это разные маршруты (например,'/users/documents'
,'/pages/documents'
и т. Д.)? Как выглядит ваша иерархия маршрутов? Вы также можете попробовать использовать Augury (augury.angular.io), чтобы получить красивую схему маршрута. - person Mike Hill   schedule 13.07.2017route.params
. Проведите какое-нибудь сравнение. - person e-cloud   schedule 15.07.2017route.params
ищет:ID
пути, а неdata
параметры. - person smartmouse   schedule 18.07.2017route.params
ищет:ID
,route.queryParams
ищет параметр запроса в URL-адресе,route.data
ищет свойствоdata
на пути маршрутизатора. Вот плункер, поскольку вы можете видеть, что последний ребенок не может видетьdata
: plnkr.co/edit/GpNQxfWVi4BrF5 / а>. Это правильно, что я должен использоватьroute.parent.params
, чтобы он работал? Иroute.parent.parent.params
, если я добавлю больше детей под последним ребенком? - person smartmouse   schedule 19.07.2017