微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Angular路由里的resolve接口的使用方法

https://angular.io/api/router/Resolve

Interface that classes can implement to be a data provider. A data provider class can be used with the router to resolve data during navigation. The interface defines a resolve() method that is invoked when the navigation starts. The router waits for the data to be resolved before the route is finally activated.

在route被activate之前,需要一些额外的数据。这些数据通过Angular route接口提供的resolve方法提供。

看个具体的例子。

路由配置:

const CUSTOM_ROUTES: Routes = [
  { path: "custom/:id", 
    component: RouteDemoComponent,
    data:{ name: 'jerry'},
    canActivate: [CanActivateTeam],
    resolve: {
      hero: HeroResolver
    } 
  }
];

需要在app.module.ts里的NgModule区域的providers定义里声明HeroResolver:

HeroResolver的具体实现:

import { Injectable } from '@angular/core';
import { Resolve, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';
import { Observable } from 'rxjs';

@Injectable({ providedIn: 'root' })
export class HeroResolver implements Resolve<string> {
  constructor() {}

  resolve(
    route: ActivatedRouteSnapshot,
    state: RouterStateSnapshot
  ): Observable<any>|Promise<any>|any {
      console.log('resolve');
    return route.paramMap.get('id') + ' Jerry';
  }
}

注意运行时的执行时序。

首先是CanActivateTeam的执行:

然后是Resolver的执行:

最后,进入跳转到的Component的ngOnInit方法

之前用Resolve填充的数据,此刻在类型为ActivatedRoute里可以访问到了:

更多Jerry的原创文章,尽在:“汪子熙”:

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐