gpt4 book ai didi

Angular2 路由 : persisting route tabs and child routes

转载 作者:太空狗 更新时间:2023-10-29 16:54:01 28 4
gpt4 key购买 nike

Angular 社区!

我目前正在将 AngularJS 应用程序重写为 Angular 2。我想解决可以描述为:路由选项卡 + 子路由的问题。

所以,基本上 Angular 2 中的 Router 会破坏不活动的组件(我的选项卡!)。问题是我不想要这种行为。原因是我有一些组件,如图表和数据网格,我想在它们之间快速切换,我不想重新创建它们。

我找到了一些解决方法来在有路由时保留我的选项卡,但使用这种方法我不知道如何实现子路由 .我还希望有一个与深度无关的解决方案(意思是:在更深的层次上工作),因为我有更多需要保留的子选项卡。

解决方法是:我已将一些空组件放入路由并实例化选项卡,我自己使用 [hidden] 属性隐藏它们:

应用.ts:

@Component({ /*...*/ })
@RouteConfig([
{path: '/**', redirectTo: ['Dashboard']},

{path: '/dashboard', name: 'Dashboard', component: EmptyRoute},
{path: '/products/...', name: 'Products', component: EmptyRoute},
{path: '/sales', name: 'Sales', component: EmptyRoute},
{path: '/reports', name: 'Reports', component: EmptyRoute},
])
export class App {
constructor(private router: Router) {
}

public isRouteActive(route) {
return this.router.isRouteActive(this.router.generate(route))
}
}

应用程序.html:

<dashboard [hidden]="!isRouteActive(['/Dashboard'])"></dashboard>
<products-management [hidden]="!isRouteActive(['/Products'])"></products-management>
<sales [hidden]="!isRouteActive(['/Sales'])"></sales>
<reports [hidden]="!isRouteActive(['/Reports'])"></reports>

最佳答案

我知道您有两个不同的问题:

1- 如何防止组件在离开时被破坏。2- 实现子路线。

1) 目前 Angular 没有方便的方法来做到这一点。如果它们是一个名为 canDestroy() 的生命周期钩子(Hook),我们将不胜感激。

无论如何,您可以使用不可路由的选项卡或将您的数据存储在不会被破坏的更高组件上。

2) 对于子路由,我只举两个例子:

Ex1:常规子路由

const AdminRoutes: Routes = [
{
path: '',
component: AdminComponent,
children: [
{
path: 'users',
component: UsersComponent,
children: [
{ path: 'acces', component: AccesComponent, data: { preload: true} },
{ path: 'roles', component: RolesComponent, data: { preload: true} },
{ path: '', redirectTo: '/admin/users/acces', pathMatch: 'full' },
{ path: '**', redirectTo: '/admin/users/acces', pathMatch: 'full' },
],
data: { preload: true}
},
{ path: '', redirectTo: '/login', pathMatch: 'full' },
{ path: '**', redirectTo: '/login', pathMatch: 'full' }
]
},

例2:当子路由属于另一个模块时

高级模块代码

`

    const appRoutes: Routes = [
{ path: 'login', component: LoginComponent, data: { preload: true} },
{
path: 'admin',
loadChildren: 'app/modules/admin/admin.module#AdminModule',
canActivate: [AuthGuardService],
data: { preload: true}
},
{ path: '', redirectTo: '/login', pathMatch: 'full' },
{ path: '**', redirectTo: '/login', pathMatch: 'full' }

`

自己模块中的子路由代码

`

const AdminRoutes: Routes = [
{
path: '',
component: AdminComponent,
children: [
{
path: 'users',
component: UsersComponent,
children: [
{ path: 'acces', component: AccesComponent, data: { preload: true} },
{ path: 'roles', component: RolesComponent, data: { preload: true} },
{ path: '', redirectTo: '/admin/users/acces', pathMatch: 'full' },
{ path: '**', redirectTo: '/admin/users/acces', pathMatch: 'full' },
],
data: { preload: true}
},
{ path: '', redirectTo: '/login', pathMatch: 'full' },
{ path: '**', redirectTo: '/login', pathMatch: 'full' }
]
},

`

关于Angular2 路由 : persisting route tabs and child routes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34925782/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com