我希望实现这样的目标/products
显示所有产品,/products/:category
显示与特定类别相关的所有产品。为实现这一点,我有以下路线:
const productsRoutes: Routes = [
{
path: 'products',
component: ProductsComponent,
children: [
{
path: '',
component: ProductsListComponent,
},
{
path: ':category',
component: ProductsListComponent
}
]
}
];
问题
当我在类别之间切换时,一切都很好,当我在所有产品和类别产品之间切换时,反之亦然,Angular重新绘制组件并且闪烁。
Angular 2路由器最终版本没有Regex,据我所知。有什么东西我不知道,或者现在这是唯一的解决方案吗?
答案 0 :(得分:7)
你可以通过添加路线解决它
const routes: Routes = [
{ path: 'experience',
children: [
{ path: 'pending', component: ExperienceComponent },
{ path: 'requests', component: ExperienceComponent },
] }]
并在ExperienceComponent导入
import { ActivatedRoute } from "@angular/router";
并在构造函数中添加此参数
constructor(public route: ActivatedRoute)
和内部构造函数获取url
this.route.url.subscribe(params => {
console.log(params[0].path);
})
答案 1 :(得分:5)
我不知道是否有其他方法可以做到这一点,但我设法使用以下黑客工作。
export const productsRoutes: Route[] = [
{
path: 'products',
component: ProductsComponent,
children: [
{
path: '',
pathMatch: 'prefix',
component: ProductsListComponent,
children: [
{
path: '',
component: EmptyComponent,
},
{
path: ':category',
component: EmptyComponent,
},
],
},
],
},
];
EmptyComponent:
import { Component } from '@angular/core';
@Component({
selector: 'GemainEmpty',
template: '<router-outlet></router-outlet>',
})
export class EmptyComponent {
}
处理ListComponent上的路径更改:
ngOnInit() {
this.routerEventsSubscription = this.router.events.subscribe((evt) => {
if (!(evt instanceof NavigationEnd)) {
return;
}
//Code to reload/filter list
}
}
在ListComponent模板上添加路由器插座。
答案 2 :(得分:3)
您还可以定义到特定路径的重定向:
{ path: '**', redirectTo: '/home', pathMatch: 'full' },
其中/home
是您要重定向到的路线。
path: '**'
解析所有未定义的路径
答案 3 :(得分:0)
您可以使用重定向来解决它,
const productsRoutes: Routes = [
{
path: 'products',
component: ProductsComponent,
children: [
{
// path => '/products'
path: '',
redirectTo: ':category',
},
{
// path => '/products/:category'
path: ':category',
component: ProductsListComponent
}
]
}
];
除非有匹配的路径,否则更像是将默认路径设置为一个。