Angular 2 - 如何全局获取 Observable.throw [英] Angular 2 - How to get Observable.throw globally

查看:14
本文介绍了Angular 2 - 如何全局获取 Observable.throw的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何,我想全局处理 http 错误(特别是状态 401).我知道我可以做类似的事情

How, I want to handle http errors (specially status 401) globally. I know I can do something like that

getCompanies() {
    return this.http.get('https://angular2.apispark.net/v1/companies/')
       .map(res => res.json())
       .catch(res => {
           return Observable.throw(res.json());
       });

我怎样才能在另一个组件上得到这个错误?

How can I get this error on another component?

只是为了说明我想实现所有 401 错误都将用户重定向到登录页面

Just to explain I want to implement that all 401 erros redirect the user to login page

推荐答案

一种方法是扩展 HTTP 对象来拦截错误:

An approach could be to extend the HTTP object to intercept errors:

@Injectable()
export class CustomHttp extends Http {
  constructor(backend: ConnectionBackend, defaultOptions: RequestOptions) {
    super(backend, defaultOptions);
  }

  request(url: string | Request, options?: RequestOptionsArgs): Observable<Response> {
    console.log('request...');
    return super.request(url, options).catch(res => {
      // do something
    });        
  }

  get(url: string, options?: RequestOptionsArgs): Observable<Response> {
    console.log('get...');
    return super.get(url, options).catch(res => {
      // do something
    });
  }
}

并按如下所述进行注册:

and register it as described below:

bootstrap(AppComponent, [HTTP_PROVIDERS,
    new Provider(Http, {
      useFactory: (backend: XHRBackend, defaultOptions: RequestOptions) => new CustomHttp(backend, defaultOptions),
      deps: [XHRBackend, RequestOptions]
  })
]);

如果在此级别发生 401 错误,您可以根据您在此 CustomHttp 类上注入的当前路由器将用户重定向到登录页面.

If 401 errors occur as this level, you could redirect the user to login page based on the current router you injected on this CustomHttp class.

这篇关于Angular 2 - 如何全局获取 Observable.throw的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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