从可观察的方法重定向到新页面

时间:2019-11-22 13:00:25

标签: angular

我有一项可从pouchdb获取应用程序设置的服务:

settings(): Observable<any> {
    let vm = this;
    return new Observable(observer => {
        vm.pouch.get("_local/info", function(err, doc) {
            if (err) {
                observer.error({'setup': 0});
                observer.complete();  
            } else {
                observer.next(doc);
                observer.complete();
            }
        });
    });
}

我从其他组件和服务中调用该方法,如下所示:

this.settingService.settings().subscribe(data=>
    {},
    err => {
        //redirect to settings page/component
        vm.router.navigate(["settings"]);
    },
    () => {}
);

我想知道是否可以在出现错误时从settings()本身重定向?当它起作用时,我不确定预订settings()的组件会发生什么情况?

2 个答案:

答案 0 :(得分:2)

您的代码看起来不错。这是您重定向后发生的事情:

  • 由于该错误,订阅停止
  • 重定向到另一个页面会导致当前页面中的组件损坏

在问题之外仅留一条小便条:如果要重定向到父路由,请使用vm.router.navigate(["/settings"])进行导航。

答案 1 :(得分:0)

您可以map/tapObservable返回的settings()中,例如

public settings():Observable{

    var obs= // whatever you did to generate Observable here in the first place 
    return obs.pipe(
              tap((val)=>val, (err)=>doRedirect))
}