Angular2 路由解析多个动作
Angular2 route resolve multiple actions
嘿,
我的应用有多个用户,我想查看用户详细信息,因此我需要在进入路由之前通过 ID 解析该用户。如果我首先将自己定位到获取所有用户的用户组件,那么当我这样做时一切都很好。但是在重新加载的情况下,路由会尝试通过 id 解析用户并失败,因为已经没有用户(他们还没有被获取)。我想检查用户是否存在,获取它们,然后用用户解析路由。这是代码:
resolve(route: ActivatedRouteSnapshot): Observable<any>|Promise<any>|any {
let id = route.params['id'];
if (!this.usersService.checkIfUsersExist()) {
return this.usersService.getUsers().subscribe(
(success) => {
return this.usersService.getUserById(id);
},
(error) => {
this.router.navigate([ 'login ']);
}
);
} else {
return this.usersService.getUserById(id);
}
}
然后在组件
this.route.data.subscribe(
(res) => {
this.user= res['user'];
}
);
当我收听路由数据时,我得到的只是用户对象:订阅者。当我return只有this.usersService.getUserById函数时,用户对象正常。
改为使用switchMap
:
resolve(route: ActivatedRouteSnapshot): Observable<any>|Promise<any>|any {
let id = route.params['id'];
if (!this.usersService.checkIfUsersExist()) {
return this.usersService.getUsers()
.switchMap(
(success) => {
return this.usersService.getUserById(id);
})
.catch((err) => this.router.navigate([ 'login ']));
} else {
return this.usersService.getUserById(id);
}
}
嘿,
我的应用有多个用户,我想查看用户详细信息,因此我需要在进入路由之前通过 ID 解析该用户。如果我首先将自己定位到获取所有用户的用户组件,那么当我这样做时一切都很好。但是在重新加载的情况下,路由会尝试通过 id 解析用户并失败,因为已经没有用户(他们还没有被获取)。我想检查用户是否存在,获取它们,然后用用户解析路由。这是代码:
resolve(route: ActivatedRouteSnapshot): Observable<any>|Promise<any>|any {
let id = route.params['id'];
if (!this.usersService.checkIfUsersExist()) {
return this.usersService.getUsers().subscribe(
(success) => {
return this.usersService.getUserById(id);
},
(error) => {
this.router.navigate([ 'login ']);
}
);
} else {
return this.usersService.getUserById(id);
}
}
然后在组件
this.route.data.subscribe(
(res) => {
this.user= res['user'];
}
);
当我收听路由数据时,我得到的只是用户对象:订阅者。当我return只有this.usersService.getUserById函数时,用户对象正常。
改为使用switchMap
:
resolve(route: ActivatedRouteSnapshot): Observable<any>|Promise<any>|any {
let id = route.params['id'];
if (!this.usersService.checkIfUsersExist()) {
return this.usersService.getUsers()
.switchMap(
(success) => {
return this.usersService.getUserById(id);
})
.catch((err) => this.router.navigate([ 'login ']));
} else {
return this.usersService.getUserById(id);
}
}