从 Angular 2 中的解析器取消路线导航 [英] Cancel Route Navigation from Resolver in Angular 2
问题描述
我需要取消承诺拒绝的路由并停留在当前页面而不重定向到默认/错误页面,我尝试了不同的拒绝承诺的方法,但最终解决了路由或重定向到默认路由.
I needed to cancel the route on promise rejection and stay on the current page without redirecting to default/error page, I have tried different ways of rejecting the promise but ended up resolving the route or redirected to the default route.
@Injectable()
export class ModelResolver implements Resolve<MyModel> {
constructor(private router: Router) {
}
resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Promise<any> {
let params: any = route.params;
let model: MyModel= new MyModel();
return model.init().then((obj: MyModel) => {
return obj;
}).catch((err: any) => {
Promise.reject({message: err , ngNavigationCancelingError: true});
});
}
}
reject({message: err , ngNavigationCancelingError: true});
//重定向到我的默认路由
reject({message: err , ngNavigationCancelingError: true});
// redirects to my default route
return Observable.throw({message: err , ngNavigationCancelingError: true});
//重定向到当前路由而不取消
return Observable.throw({message: err , ngNavigationCancelingError: true});
// redirects to the current route without cancelling
resolve(null);或 return Observable.empty()
//重定向到当前路由而不取消
resolve(null); or return Observable.empty()
// redirects to the current route without cancelling
推荐答案
为了从解析器中取消路由,你可以使用 observable 代替 promise 并调用:observer.complete() 而不调用:observer.next()
In order to cancel route from resolver, you can use observable instead of promise and call: observer.complete() without calling: observer.next()
例如:
resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot){
return new Observable((observer) => {
let somePromiseOrObservableToGetDate=?????;
somePromiseOrObservableToGetDate.then(data => {
if (data) {
observer.next(1);
}
observer.complete();
})
.catch((err: any) => {
observer.complete();
});
});
}
在您的示例中:
let model: MyModel = new MyModel();
return new Observable((observer) => {
model.init().then((obj: any) => {
observer.next(obj);
observer.complete();
})
.catch((err: any) => {
observer.complete();
});
});
这篇关于从 Angular 2 中的解析器取消路线导航的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!