在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); or 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屋!