我需要在 promise 拒绝时取消路由并留在当前页面上而不重定向到默认/错误页面, 我尝试了不同的方法来拒绝 promise ,但最终解析了路由或重定向到默认路由。
@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});
//重定向到我的默认路由
return Observable.throw({message: err , ngNavigationCancelingError: true});
//重定向到当前路由而不取消
解决(空);或者 return Observable.empty()
//重定向到当前路由而不取消
最佳答案
为了从解析器取消路由,你可以使用可观察的而不是 promise 并调用:observer.complete()而不调用: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();
});
});
关于typescript - 从 Angular 2 中的 Resolver 取消路由导航,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48402208/