官术网_书友最值得收藏!

  • Angular Router
  • Victor Savkin
  • 178字
  • 2021-07-09 19:20:31

Resolving data

After the router has run the guards, it will resolve the data. To see how it works, let's tweak our configuration from above:

[
  {
    path: ':folder',
    children: [
      {
        path: '',
        component: ConversationsCmp,
        resolve: {
          conversations: ConversationsResolver
        }
      }
    ]
  }
]

Where ConversationsResolver is defined as follows:

@Injectable()
class ConversationsResolver implements Resolve<any> {
  constructor(private repo: ConversationsRepo, private currentUser: User) {}

  resolve(route: ActivatedRouteSnapshot, state: RouteStateSnapshot):
      Promise<Conversation[]> {
    return this.repo.fetchAll(route.params['folder'], this.currentUser);
  }
}

Finally, we need to register ConversationsResolver when bootstrapping our application:

@NgModule({
  //...
  providers: [ConversationsResolver],
  bootstrap: [MailAppCmp]
})
class MailModule {
}

platformBrowserDynamic().bootstrapModule(MailModule);

Now when navigating to /inbox, the router will create a router state, with an activated route for the conversations component. That route will have the folder parameter set to inbox. Using this parameter with the current user, we can fetch all the inbox conversations for that user.

We can access the resolved data by injecting the activated route object into the conversations component:

@Component({
  template: `
    <conversation *ngFor="let c of conversations | async"></conversation>
  `
})
class ConversationsCmp {
  conversations: Observable<Conversation[]>;
  constructor(route: ActivatedRoute) {
    this.conversations = route.data.pluck('conversations');
  }
}
主站蜘蛛池模板: 连州市| 清原| 调兵山市| 曲靖市| 霍城县| 佛山市| 永善县| 伊川县| 建湖县| 南宫市| 昂仁县| 精河县| 小金县| 江永县| 常州市| 房山区| 威远县| 应城市| 平谷区| 信丰县| 无棣县| 农安县| 惠州市| 体育| 咸丰县| 巴林左旗| 湖北省| 扶风县| 乌拉特后旗| 苍溪县| 普陀区| 耒阳市| 江达县| 斗六市| 太谷县| 牟定县| 永登县| 双鸭山市| 贺州市| 古丈县| 平塘县|