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

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

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