从 Angular 2 中的解析器取消路线导航 [英] Cancel Route Navigation from Resolver in Angular 2

查看:18
本文介绍了从 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆