2017-07-08 3 views
2

httpインターセプタで$ windowオブジェクトを使用しようとしていますので、localStorageを参照できます。

問題は、次の行を削除するたびにWebアプリケーションが機能することです。しかし、私がそれを追加すると、ページはロードされず、白い画面だけが表示されますが、エラーもありません。

let {$window} = this; 

私のメインモジュール設定

$httpProvider.interceptors.push('authInterceptor'); 

マイauthInterceptorサービスクラス:

export class authInterceptor { 
    constructor($window) { 
    this.$window = $window; 
    } 

    request(config) { 
    let {$window} = this; 

    return config; 
    } 

    responseError(response) { 
    return response; 
    } 

} 
authInterceptor.$inject = ['$window']; 
+0

は、次にそれを使用しないでください?これを使って$ window?または、let w = thisを使用してください。$ window?私の推測では、あなたのトランスバレーターはその構文をサポートしていないということです。 –

+0

これはどちらも動作しません。この構文は他のモジュールでも動作します。 – Soundwave

+0

Logginコンストラクタの$ windowオブジェクトは、有効なウィンドウオブジェクトbtwを返します。hmm – Soundwave

答えて

2

迎撃するので、ES6がブラウザによってサポートされている(そしてそれがサポートされますことを考えると、サービスは、おそらく透明化されるクラスです)、唯一の可能性はlet {$window} = thisは、thisがクラスインスタンスでもオブジェクトでもないという問題を引き起こす可能性があります。

インターセプタ関数は、コールバックとして使用される関数であり、pushed to the stackです。つまり、thisは、厳密なモードではundefinedになります。コールバックとして使用されている他のクラスのメソッドとして、これらのものは、それを維持し、注入されたサービスを使用することができるようにするために、適切なコンテキストにバインドする必要があります

constructor($window) { 
    this.$window = $window; 
    this.request = this.request.bind(this); 
    this.responseError = this.responseError.bind(this); 
    } 
+0

ありがとう!これはまさに私が探していたものでした。 – Soundwave

+0

ようこそ。 – estus

関連する問題