В приложениях на основе модулей, чтобы добавить защиту ко всем маршрутам одновременно, я могу передать ее в качестве второго параметра функции RouterModule.forRoot.
RouterModule.forRoot(routes, { canActivate: [AuthGuard] })
Как я могу сделать это с помощью функции ProvideRouter?
Документы не помогли.
Я попробую использовать этот звонок
provideRouter(routes, { canActivate: [authGuard], })
но это не сработало.
Прошу прощения за неверную информацию, в памяти запомнилось именно так
Я исследовал множество версий документации Angular. Я не нашел ни одной версии, где это поддерживалось.
В extraOptions в forRoot нет свойства canActivate
, поэтому функция вообще не вызывается.
Если вы хотите добиться этого, установите функцию canActivate в массиве для всех корневых компонентов маршрутизации, она будет выполняться при всех изменениях маршрута в приложении.
Этот пример не является автономным, он сосредоточен на конфигурации маршрутизации, поскольку именно это я и пытаюсь продемонстрировать. Запуск функции при всех изменениях маршрута в приложении.
@Injectable({
providedIn: 'root',
})
export class testActivate implements CanActivate {
constructor() {}
canActivate(route, state): boolean {
console.info('running');
return true; // we can try wil false and it will not redirect to the path
}
}
const routes: Routes = [
{ path: '', component: HomeComponent, canActivate: [testActivate] },
{ path: 'home', component: HomeComponent, canActivate: [testActivate] },
{ path: 'contact', component: ContactComponent, canActivate: [testActivate] },
{
path: 'products',
component: ProductsComponent,
canActivate: [testActivate],
},
{
path: 'product/:id',
component: ProductComponent,
canActivate: [testActivate],
},
{ path: 'users', component: UsersComponent, canActivate: [testActivate] },
{
path: 'user/:id/:name',
component: UserComponent,
canActivate: [testActivate],
},
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule],
})
export class AppRoutingModule {}
ок, спасибо, я был уверен, что это возможно
Когда я пробую ваш первый фрагмент кода в своем приложении Angular 18, я получаю сообщение об ошибке: TS2353: литерал объекта может указывать только известные свойства, а
canActivate
не существует в типеExtraOptions
. Похоже, что Angular (больше?) не поддерживает это.