Angular 2 - 没有重新实例化的同一个组件的多个路由?
问题描述:
我想为同一个组件使用多个路由而不需要重新实例化。Angular 2 - 没有重新实例化的同一个组件的多个路由?
实施例路线:
[
{ path: 'test/:p1', component:component },
{ path: 'test/:p1/:p2', component:component },
{ path: 'test/:p1/:p2/:p3', component:component }
]
在i路径分量之间切换被重新实例化和旋转变压器再运行。我提醒说不要使用查询参数。 Optional Parameters for angular2 routes #12347
任何想法:
我的情况下,在这个问题上恰恰说明?我需要使用查询参数吗?
我的解析器代码:
@Injectable()
export class MyResolver implements Resolve<MyObject[]> {
constructor(private myService: MyService) {}
resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<MyObject[]> {
return this.myService.getData(route.params.id);
}
}
答
这样不是工作?它更是一个解决办法不能真正解决问题的,但是这是我能拿出最好的:
resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<MyObject[]> | null {
if (route.includes('test')) {
return null;
}
return this.myService.getData(route.params.id);
}
然后你也可以在你的组件,你避免的情况下,做任何事情你解析器返回null
管理这种情况下, 。使用
答
解决方法一URLMatcher:
const routes: Routes = [{
matcher: urlSegments =>
urlSegments[0] && urlSegments[0].path === 'test' ? {
consumed: urlSegments,
posParams: {
...urlSegments[1] && {p1: urlSegments[1]},
...urlSegments[2] && {p2: urlSegments[2]},
...urlSegments[3] && {p3: urlSegments[3]}
}
} :
null,
component: component
}];
什么用解析器的问题被再次运行?是关于一些HTTP请求再次被触发的吗? 在这个问题上似乎没有任何更新,所以我相信只有解决方法可以找到这个解决方案呢。 你可以做的是在你的解析器中监视当前路由/下一个被激活的路由,以便在你已经从包含你的组件的路径出来时不会触发请求。这可能是一个解决方案 –
即使我从一个包含我的组件的路径重新实例化(我的解析器获取http请求)。 – Jarek
你可以显示你的解析器代码和组件构造函数/ ngOnInit吗? –