The Angular Routing docs mention component instance creation, component instance activation, and route activation.
The docs do not explain the differences of these concepts, and when each creation/activation occurs.
In summary: It is not clear what is really meant by component instance activation and route activation, and how that relates to component instance creation (particularly timing wise).
Instance Creation
Instance Activation
Route Activation
Here are some mentions of the above three concepts, in the Angular docs:
Instance Creation
By default, the router re-uses a component instance when it re-navigates to the same component type without visiting a different component first.
...
This application won't re-use the HeroDetailComponent. The user always returns to the hero list to select another hero to view. There's no way to navigate from one hero detail to another hero detail without visiting the list component in between. Therefore, the router creates a new HeroDetailComponent instance every time.
Link
Instance Activation
When the browser's location URL changes to match the path segment /crisis-center, then the router activates an instance of the CrisisListComponent and displays its view.
Link
When the application requests navigation to the path /crisis-center, the router activates an instance of CrisisListComponent, displays its view, and updates the browser's address location and history with the URL for that path.
Link
Route Activation
The data property in the third route is a place to store arbitrary data associated with this specific route. The data property is accessible within each activated route.
Link
You can also protect child routes with the CanActivateChild guard. The CanActivateChild guard is similar to the CanActivate guard. The key difference is that it runs before any child route is activated.
Link
In the Hero Detail and Crisis Detail, the app waited until the route was activated to fetch the respective hero or crisis.
Link
The ActivatedRouteSnapshot contains the future route that will be activated and the RouterStateSnapshot contains the future RouterState of the application, should you pass through the guard check.
Link
What is an activated route? The Angular Docs define the ActivatedRoute as. A service that is provided to each route component that contains route specific information such as route parameters, static data, resolve data, global query params and the global fragment.
Difference between activatedroute and routerstateActivatedRoute interface provides access to information about a route associated with a component that is loaded in an outlet. Use to traverse the RouterState tree and extract information from nodes.
A routed Angular application has one singleton instance of the Router service. When the browser's URL changes, that router looks for a corresponding Route from which it can determine the component to display. A router has no routes until you configure it.
Angular provides extensive set of navigation feature to accommodate simple scenario to complex scenario. The process of defining navigation element and the corresponding view is called Routing. Angular provides a separate module, RouterModule to set up the navigation in the Angular application.
What is the difference between instance creation and instance activation?
Instantiating means creating an instance of a route (ActivateRoute) or component. Activating of a route means attaching it to the router-outlet directive. Activating of a component means attaching it to the DOM. Routes and components are activated using activateWith function of a router-outlet directive.
Let's see some examples. Suppose you have the following routes:
{
path: 'a',
component: AComponent,
children: [
{ path: 'b', component: BComponent },
{ path: ':name', component: DComponent }
]
}
Now you navigate to a/b
.
The router will:
{ path: 'a', component: AComponent, children: [] }
route{ path: 'b', component: BComponent }
routerouter-outlet
locationsAComponent
and BComponent
using this approach
AComponent
and BComponent
by adding them to DOMNow you navigate to a/n1
.
The router will:
a
- { path: 'a', component: AComponent, children: [] }
route (no instantiation or activation){ path: ':name', component: DComponent }
route{ path: ':name', component: DComponent }
routeAComponent
instance (no instantiation or activation)DComponent
instanceDComponent
by attaching it to the router-outlet
in AComponent
viewNow you navigate to a/n2
.
The router will:
a
- { path: 'a', component: AComponent, children: [] }
route (no instantiation or activation)n2
- { path: ':name', component: DComponent }
route (no instantiation or activation)n2
activated routeDComponent
instance (no instantiation or activation)If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With