角社区!
我目前正在将 AngularJS 应用程序重写为 Angular 2。我想解决可以描述为的问题:路由选项卡 + 子路由。
因此,基本上 Angular 2 中的路由器会破坏非活动组件(我的选项卡!)。问题是我不想要这种行为。原因是我有一些像图表和数据网格这样的组件,并且想在它们之间快速切换,我不想重新创建它们。
我找到了一些解决方法来保留我的选项卡,同时拥有路由,但使用这种方法我不知道如何实现子路由。我还希望有一个与深度无关的解决方案(意思是:更深入地工作),因为我有更多需要保留的子选项卡。
解决方法是:我将一些空组件放入路由并实例化选项卡,我自己用[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>