- 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'); } }
推薦閱讀
- VMware View Security Essentials
- Learn Blockchain Programming with JavaScript
- Java完全自學教程
- 跟“龍哥”學C語言編程
- AWS Serverless架構:使用AWS從傳統部署方式向Serverless架構遷移
- PHP+MySQL網站開發技術項目式教程(第2版)
- 青少年美育趣味課堂:XMind思維導圖制作
- 網頁設計與制作教程(HTML+CSS+JavaScript)(第2版)
- Blockly創意趣味編程
- Android Native Development Kit Cookbook
- JavaScript 程序設計案例教程
- ArcGIS By Example
- 微服務架構深度解析:原理、實踐與進階
- Quantum Computing and Blockchain in Business
- 零基礎輕松學C++:青少年趣味編程(全彩版)