typescript - 从 Angular 2 中的 Resolver 取消路由导航

标签 typescript redirect angular2-routing

我需要在 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/

相关文章:

typescript - 如何按值查找枚举?

Angular 形式验证 : compare two fields in different form groups

typescript - VSCode/TypeScript 中是否有 "use explicit type refactoring"?

angular - ng2-select 中的数据绑定(bind)失败

angular - canActivate 返回 Promise 或 Observable block 更改检测

javascript - tsconfig 的 'outFile' 和 webpack config 的 'output' 有什么区别

asp.net-mvc - 如何避免 ASP.NET MVC 中的重定向循环

debugging - 如何记录 ssh 调试信息?

javascript - HTTP 200 + 空响应 + 重定向

javascript - 在刷新路由上使用 Angular 2 路由器重定向到默认路由