2017-04-18 18 views
0

私は次のようなものを持っています:isAuthenticatedかどうかを判断するインスタンス内に単にプロパティを持っています。何らかの理由で、this.isAuthenticatedをさまざまな値に設定して値を変更していても、logoutと他のいくつかの方法では、その変更は角度では検出されません。私もマニュアルをしようとした$digest$applyまだ運がない。変更をトリガーしないサービス内のプロパティへの変更

export default class UserService { 

    constructor($http, $state, AppConstants, JWTService) { 
    'ngInject'; 

    this.$http = $http; 
    this.$state = $state; 

    this.isAuthenticated = false; 
    } 


    logout() { 
    this.isAuthenticated = false; 
    this.$state.go('login', null, { reload: true }); 
    } 

    verify() { 
    return new Promise((resolve) => { 

     // if a user exists, then resolve 
     if (this.isAuthenticated) { 
     return resolve(true); 
     } 

     this.$http({ 
     method: 'POST', 
     url: `${this.AppConstants.api}/verify` 
     }) 
     .then(() => { 
     this.isAuthenticated = true; 
     return resolve(true); 
     }) 
     .catch(() => { 
     this.isAuthenticated = false; 
     return resolve(false); 
     }); 
    }); 
    } 

} 

コードが動作し、私が最初にログインしたとき、私はtrueにthis.isAuthenticatedを設定して投稿することによりthis.verify作品。しかし、logoutの場合、this.isAuthenticatdfalseになりますが、if (this.isAuthenticated)は、this.verifyを再度呼び出すと、trueのままです。

+0

これは角度V1の質問のように見えますか?もしそうなら、あなたのタグを更新してください。 'angular'はAngular v2 +で、' angularjs'は角度1です。ありがとう! – DeborahK

+0

タグを更新しました。 – Detuned

答えて

0

"this"はあなたの.then()関数内にあるとは思いません。範囲が変更されました。このシナリオは一般的なもので、JavaScriptで作業するときは常に念頭に置いておく必要があります。ここではそれについて何ができるかのほんの一例です:

javascript promises and "this"

+0

私は太い矢印の構文を使用しているので、コンテキストが同じままであるので、 'this 'が何であるか知っています。私はすでに同じ状況にいることを確認するためにそれをテストしました。 – Detuned

関連する問題