Pra*_*ddy 5 redirect typescript angular2-routing
我需要取消拒绝承诺的路由,并停留在当前页面上而不重定向到默认/错误页面,我尝试了不同的拒绝承诺的方法,但最终解决了该路由或重定向到了默认路由。
@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});
});
}
}
Run Code Online (Sandbox Code Playgroud)
reject({message: err , ngNavigationCancelingError: true}); //重定向到我的默认路由
return Observable.throw({message: err , ngNavigationCancelingError: true}); //重定向到当前路由而不取消
resolve(null); or return Observable.empty() //重定向到当前路由而不取消
为了取消解析器的路由,可以使用observable代替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();
});
});
}
Run Code Online (Sandbox Code Playgroud)
在您的示例中:
let model: MyModel = new MyModel();
return new Observable((observer) => {
model.init().then((obj: any) => {
observer.next(obj);
observer.complete();
})
.catch((err: any) => {
observer.complete();
});
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4516 次 |
| 最近记录: |