Мне не нравится использовать router.navigate
, потому что для этого требуется использовать магическую строку по всему приложению. КакСильно типизированная обертка вокруг router.navigate
this.router.navigate(['/user', user.id]);
Так что я хотел бы создать строго типизированный обертку вокруг него:
export class NavigatorService {
constructor(private router: Router) {}
public user(userId: number): Promise<boolean> {
return this.router.navigate(['/user', user.id]);
}
}
Конечно, это должно быть синхронизированы с конфигурацией маршрутизации.
Что беспокоит меня является использование в шаблонах:
<a [routerLink]="['/user', user.id]">
</a>
Должен ли я добавить дополнительный метод, который возвращает массив?
export class NavigatorService {
...
public userArr(userId: number): Array<any> {
return ['/user', user.id];
}
}
<a [routerLink]="navigator.userArr(user.id)">
</a>
Любые идеи? Может быть, кто-то уже пошел по этой дороге?
Вы имеете в виду создание пользовательской директивы для каждого маршрута? –
Нет, вы только создаете директиву один раз и помещаете его в модуль, например 'MyRouterModule', на' declarations: [MyRouterLinkDirective] 'и экспортируете: [MyRouterLinkDirective]', а затем везде, где вы используете директиву, добавьте модуль в 'import: [ MyRouterModule] 'и' [myRouterLink] = "32" 'станет экземпляром' MyRouterLinkDirective' везде. –
Я имел в виду немного другую вещь. Что [[myRouterLink] = "32" 'равно?Если он равен '[routerLink] =" ['/ user', 32] ", тогда мне нужно создать другую директиву для разных маршрутов ('/ user', '/ client', '/ order' и т. Д.) –