Kat*_*a24 7 angular-routing angular
我有一个如下所示的user-profile路由模块:
const userProfileRoutes: Routes = [
{
path: ':id/view',
component: UserProfileViewComponent,
resolve: {
user: UrlUserResolverService,
posts: PostsAllResolverService
},
canActivate: [ AccessGuard ],
children: [
{
path: 'posts',
outlet: 'tabs',
component: TabPostsViewComponent
},
{
path: 'followers',
outlet: 'tabs',
component: TabFollowersFollowingViewComponent,
resolve: { followers: UserFollowersResolverService }
},
{
path: 'following',
outlet: 'tabs',
component: TabFollowersFollowingViewComponent,
resolve: { following: UserFollowingResolverService }
}
]
},
{
path: ':id/notifications',
component: UserProfileNotificationsComponent,
resolve: { notifications: NotificationsResolverService },
canActivate: [ AccessGuard ]
}
];
Run Code Online (Sandbox Code Playgroud)
当我在应用程序的移动视图中导航更改网址时,这一切都正常,正如我所期望的那样.
但在平板电脑及以上user-profile-view,侧边栏中显示,如下所示:
<div id="sidebar">
<user-profile-view></user-profile-view>
</div>
Run Code Online (Sandbox Code Playgroud)
所以,因为user-profile在侧边栏中我不希望整个网址发生变化 - 我只想改变命名的路由器(标签),但我无法弄清楚要在navigate功能中放置什么.
这是我到目前为止所做的,适用于移动设备:
goToChildRoute(route: string) {
let queryParams = route === 'posts' ? { queryParams: null } : { queryParams: { id: this.user.pk } };
this.router.navigate([`/user-profile/${this.user.pk}/view`, { outlets: { tabs: [route] } }], queryParams);
}
Run Code Online (Sandbox Code Playgroud)
和相关的HTML:
<div class="tabs">
<div *ngFor="let tab of tabs;" [id]="tab.route" class="tab" (click)="goToChildRoute(tab.route)">
<p>{{ tab.count }}</p>
<p>{{ tab.title }}</p>
</div>
</div>
<router-outlet name="tabs"></router-outlet>
Run Code Online (Sandbox Code Playgroud)
所以重申一下 - 如何更改tabs我在平板电脑(768px)及以上时的命名路由器?
我不确定我是否得到了这个问题,但也许你可以这样做:
<div *ngFor="let tab of tabs;" [id]="getTabRoute(tab)" class="tab" (click)="onTabClick(tab)">
<p>{{ tab.count }}</p>
<p>{{ tab.title }}</p>
</div>
Run Code Online (Sandbox Code Playgroud)
onTabClick(tab: Tab) {
const route = this.getTabRoute(tab);
let queryParams = route === 'posts' ? { queryParams: null } : { queryParams: { id: this.user.pk } };
this.router.navigate([`/user-profile/${this.user.pk}/view`, { outlets: { tabs: [route] } }], queryParams);
}
getTabRoute(tab: Tab) {
return window.screen.width > 768 ? tab.tabletRoute : tab.mobileRoute;
}
Run Code Online (Sandbox Code Playgroud)
当然,您需要修改选项卡数组,以便每个选项卡都包含适用于平板电脑和移动设备的单独路线。希望有帮助。
| 归档时间: |
|
| 查看次数: |
175 次 |
| 最近记录: |