- Angular Router
- Victor Savkin
- 331字
- 2021-07-09 19:20:32
Activating components

At this point, we have a router state. The router can now activate this state by instantiating all the needed components, and placing them into appropriate router outlets.
To understand how it works, let's take a look at how we use router outlets in a component template.
The root component of the application has two outlets: primary and popup.
@Component({ template: ` ... <router-outlet></router-outlet> ... <router-outlet name="popup"></router-outlet> ` }) class MailAppCmp { }
Other components, such as ConversationCmp
, have only one:
@Component({ template: ` ... <router-outlet></router-outlet> ... ` }) class ConversationCmp { }
Other components, such as ConversationCmp
, have only one:
@Component({ template: ` ... <router-outlet></router-outlet> ... ` }) class ConversationCmp { }
Now imagine we are navigating to /inbox/33/messages/44(popup:compose)
.
That's what the router will do. First, it will instantiate ConversationCmp
and place it into the primary outlet of the root component. Then, it will place a new instance of ComposeCmp
into the 'popup'
outlet. Finally, it will instantiate a new instance of MessageCmp
and place it in the primary outlet of the just created conversation component.
Using parameters
Often components rely on parameters or resolved data. For instance, the conversation component probably need to access the conversation object. We can get the parameters and the data by injecting ActivatedRoute
.
@Component({...}) class ConversationCmp { conversation: Observable<Conversation>; id: Observable<string>; constructor(r: ActivatedRoute) { // r.data is an observable this.conversation = r.data.map(d => d.conversation); // r.params is an observable this.id = r.params.map(p => p.id); } }
If we navigate from inbox/33/messages/44(popup:compose)
to /inbox/34/messages/45(popup:compose)
, the data observable will emit a new map
with the new object, and the conversation component will display the information about Conversation 34.
As you can see the router exposes parameters and data as observables, which is convenient most of the time, but not always. Sometimes what we want is a snapshot of the state that we can examine at once.
@Component({...}) class ConversationCmp { conversation: Conversation; constructor(r: ActivatedRoute) { const s: ActivatedRouteSnapshot = r.snapshot; this.conversation = s.data['conversation']; // Conversation } }
- PHP動態(tài)網(wǎng)站程序設(shè)計(jì)
- Visual FoxPro 程序設(shè)計(jì)
- Banana Pi Cookbook
- Amazon S3 Cookbook
- Scientific Computing with Scala
- Angular開發(fā)入門與實(shí)戰(zhàn)
- 學(xué)習(xí)OpenCV 4:基于Python的算法實(shí)戰(zhàn)
- Extreme C
- Java程序設(shè)計(jì)與項(xiàng)目案例教程
- 貫通Tomcat開發(fā)
- INSTANT Premium Drupal Themes
- Python編程入門(第3版)
- Java語言程序設(shè)計(jì)實(shí)用教程(第2版)
- Responsive Web Design with jQuery
- React.js 16從入門到實(shí)戰(zhàn)