2016-07-14 2 views
0

このチュートリアルに従います。以下は
https://www.illucit.com/blog/2016/03/angular2-http-authentication-interceptor/変数「は、この」オブジェクトに割り当てられて取得されていない - 私は1つのHTTPインターセプターを作成しているangular2-RC4

私のコードです:

import {Injectable} from '@angular/core'; 
import {Http, Request, RequestOptionsArgs, Response, RequestOptions, ConnectionBackend} from '@angular/http'; 
import { Observable } from 'rxjs/Observable'; 
import 'rxjs/add/operator/catch'; 
import 'rxjs/Rx'; 
import {EventEmitterService} from '../service/event.emitter'; 


export class CustomHttp extends Http { 
    constructor(backend: ConnectionBackend, defaultOptions: RequestOptions, private _eventEmitterService: EventEmitterService) { 
     super(backend, defaultOptions); 
     alert(this._eventEmitterService); //Undefined 
     alert(_eventEmitterService); //gives object 
    } 

    request(url: string | Request, options?: RequestOptionsArgs): 
     Observable<Response> { 
     /* CUSTOM CODE GOES HERE SEE EXAMPLE BELOW*/ 
     return this.intercept(super.request(url , options)); 
    } 

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

    intercept(observable: Observable<Response>): Observable<Response> { 
     return observable.catch((err, source) => { 
      if (err.status == 401) { 
       this._eventEmitterService.get('authenticationFailed').emit('true'); //this._eventEmitterService is undefined 
      } 
      return Observable.throw(err); 

     }); 
    } 
} 

そして以下は、それをブートストラップするためのコードです:あなたはCustomHttpのコンストラクタが表示された場合

bootstrap(AppComponent, [ disableDeprecatedForms(),provideForms(), EventEmitterService, 
    provide(Http, { 
     useFactory: (backend: XHRBackend, defaultOptions: RequestOptions, eventEmitterService: EventEmitterService) 
      => new CustomHttp(backend, defaultOptions, eventEmitterService), 
     deps: [XHRBackend, RequestOptions, EventEmitterService] 
    }) 
]); 

、私はEventEmitterServiceのオブジェクトを注入しています。しかし、このオブジェクトはクラスの "this"オブジェクトに割り当てられていません。そのため、私は "インターセプタ"メソッドで使用することができません。
私は何をしていますか?

答えて

0

私は、この問題の根本的な原因を得ました。他の人を助けることができるようにここに掲示する。
上記のコードに間違いはありません。
ルーティングに{path: ''、pathMatch: 'prefix'、redirectTo: 'test'}を追加しました。このデフォルトのルーティングオプションを削除すると、動作し始めました。だから問題はリダイレクトだと思う。リダイレクトすると、この問題が発生します。
おかげ

関連する問題