Mag*_*nus 5 javascript routing angular
Angular Routing文档提到了组件实例创建,组件实例激活和路由激活.
文档没有解释这些概念的差异,以及何时发生每个创建/激活.
总结:目前尚不清楚组件实例激活和路由激活的真正含义,以及它与组件实例创建的关系(特别是时序方面).
实例创建
实例激活
路线激活
以下是Angular文档中对上述三个概念的一些提及:
实例创建
默认情况下,路由器在重新导航到相同的组件类型时重新使用组件实例,而不首先访问其他组件.
...
此应用程序不会重复使用HeroDetailComponent.用户始终返回到英雄列表以选择要查看的另一个英雄.没有访问其中的列表组件,无法从一个英雄细节导航到另一个英雄细节.因此,路由器每次都会创建一个新的HeroDetailComponent实例.
实例激活
当浏览器的位置URL更改为与路径段/危机中心匹配时,路由器将激活 CrisisListComponent 的实例并显示其视图.
当应用程序请求导航到路径/危机中心时,路由器会激活 CrisisListComponent 的实例,显示其视图,并使用该路径的URL更新浏览器的地址位置和历史记录.
路线激活
第三条路径中的data属性是存储与此特定路由关联的任意数据的位置.在每个激活的路由中都可以访问data属性.
您还可以使用CanActivateChild防护来保护子路线.CanActivateChild后卫与CanActivate后卫相似.关键的区别在于它在激活任何子路由之前运行.
在英雄细节和危机细节中,应用程序一直等到路线被激活以获取相应的英雄或危机.
如果您通过保护检查,ActivatedRouteSnapshot包含将被激活的未来路由,并且RouterStateSnapshot包含应用程序的未来RouterState.
Max*_*kyi 11
实例创建和实例激活之间有什么区别?
实例化意味着创建路由(ActivateRoute)或组件的实例.激活路由意味着将其附加到router-outlet指令.激活组件意味着将其附加到DOM.使用router-outlet指令的activateWith函数激活路由和组件.
我们来看一些例子.假设您有以下路线:
{
path: 'a',
component: AComponent,
children: [
{ path: 'b', component: BComponent },
{ path: ':name', component: DComponent }
]
}
Run Code Online (Sandbox Code Playgroud)
现在你导航到a/b.
路由器将:
{ path: 'a', component: AComponent, children: [] }路线{ path: 'b', component: BComponent }路线router-outlet位置来激活这些路线AComponent并BComponent使用这种方法AComponent并将BComponent它们添加到DOM现在你导航到a/n1.
路由器将:
a- { path: 'a', component: AComponent, children: [] }路由(没有实例化或激活){ path: ':name', component: DComponent }路线{ path: ':name', component: DComponent }路线AComponent实例(没有实例化或激活)DComponent实例DComponent通过将其附接到router-outlet在AComponent视图现在你导航到a/n2.
路由器将:
a- { path: 'a', component: AComponent, children: [] }路由(没有实例化或激活)n2- { path: ':name', component: DComponent }路由(没有实例化或激活)n2激活路线的参数DComponent实例(没有实例化或激活)| 归档时间: |
|
| 查看次数: |
1148 次 |
| 最近记录: |