Spec-Zone.ru › Angular

Resolve

Интерфейс, который классы могут реализовать, чтобы служить поставщиком данных. Класс — поставщик данных можно использовать с маршрутизатором для разрешения данных во время навигации. Интерфейс определяет метод resolve(), который вызывается сразу после события маршрутизатора ResolveStart. Маршрутизатор ожидает разрешения данных, прежде чем окончательно активировать маршрут.

ResolveFnРезолверы данных

API

interface Resolve<T> {
  resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): MaybeAsync<T | RedirectCommand>;
}

resolve

MaybeAsync<T | RedirectCommand>
@paramrouteActivatedRouteSnapshot
@paramstateRouterStateSnapshot
@returnsMaybeAsync<T | RedirectCommand>

Описание

Интерфейс, который классы могут реализовать, чтобы служить поставщиком данных. Класс — поставщик данных можно использовать с маршрутизатором для разрешения данных во время навигации. Интерфейс определяет метод resolve(), который вызывается сразу после события маршрутизатора ResolveStart. Маршрутизатор ожидает разрешения данных, прежде чем окончательно активировать маршрут.

В следующем примере реализуется метод resolve(), который получает данные, необходимые для активации запрошенного маршрута.

@Injectable({ providedIn: 'root' })
export class HeroResolver implements Resolve<Hero> {
  private readonly service = inject(HeroService);

  resolve(
    route: ActivatedRouteSnapshot,
    state: RouterStateSnapshot
  ): Observable<Hero>|Promise<Hero>|Hero {
    return this.service.getHero(route.paramMap.get('id'));
  }
}

Здесь определённая функция resolve() передаётся как часть объекта Route в конфигурации маршрутизатора:

@NgModule({
  imports: [
    RouterModule.forRoot([
      {
        path: 'detail/:id',
        component: HeroDetailComponent,
        resolve: {
          hero: HeroResolver
        }
      }
    ])
  ],
  exports: [RouterModule]
})
export class AppRoutingModule {}

А получить доступ к разрешённым данным можно из HeroComponent:

@Component({
 selector: "app-hero",
 templateUrl: "hero.component.html",
})
export class HeroComponent {

  private readonly activatedRoute = inject(ActivatedRoute);

 ngOnInit() {
   this.activatedRoute.data.subscribe(({ hero }) => {
     // do something with your resolved data ...
   })
 }

}

Примечания по использованию

Если указаны и защитники, и резолверы, резолверы запускаются только после выполнения и успешного завершения всех защитников. Например, рассмотрим следующую конфигурацию маршрута:

{
 path: 'base'
 canActivate: [BaseGuard],
 resolve: {data: BaseDataResolver}
 children: [
  {
    path: 'child',
    guards: [ChildGuard],
    component: ChildComponent,
    resolve: {childData: ChildDataResolver}
   }
 ]
}

Порядок выполнения: BaseGuard, ChildGuard, BaseDataResolver, ChildDataResolver.

Super-powered by Google ©2010–2025.
Code licensed under an MIT-style License. Documentation licensed under CC BY 4.0.
https://angular.dev/api/router/Resolve

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API