2017-07-04 15 views
0

誰でもこれを助けることができますか? var ABCKeyを更新できません。 setAuthenticatedAccountとconsole.logを実行して正しい値を返します。その後、getAuthenticatedAccountを実行し、undefinedを受け取ります。Angularjs Factory内のバールを更新できません

angular.module('authentication.service', [ 
]) 

.factory('Authentication', ['$state', '$cookies', '$http', 'app', 'routes', 'cfCryptoHttpInterceptor', 
    function($state, $cookies, $http, app, routes, cfCryptoHttpInterceptor) { 

    var ABCKey; 

    var setAuthenticatedAccount = function (account, tokenAuth) { 
     var accountInfo = {'email': account.email, 'username': account.username, 'token': tokenAuth} 
     var abc = CryptoJS.enc.Base64.parse(account.abc); 

     Authentication.setABCKey(abc); 

     console.log(Authentication.showABCKey()) 

    } 

    var getAuthenticatedAccount = function() { 
     if(!$cookies.authenticatedAccount) { 
      return; 
     } 

     console.log(Authentication.showABCKey()) 

    } 


    var setABCKey = function(key) { 
     ABCKey = key; 
    }; 

    var showABCKey = function() { 
     return ABCKey; 
    }; 

    var Authentication = { 
     setAuthenticatedAccount: setAuthenticatedAccount, 
     getAuthenticatedAccount: getAuthenticatedAccount, 
     setABCKey: setABCKey, 
     showABCKey: showABCKey 
    }; 

    return Authentication; 
}]); 
+0

ようdecelaration時var ABCKey=nullを設定参照/ステートメント/リターン)を指定します(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/if...else)。 – georgeawg

答えて

0

は、あなたがこの

のvar ABCKeyにABCkeyを定義する必要がVARそのシングルトーンクラスを使用してはいけません。

には、オブジェクトを毎回作成されているので、あなたの関数を呼び出している間Authenticationを削除この

this.ABCKey = ''; 
+0

動作しません: "ReferenceError:ABCKeyが定義されていません" – Mateus

+0

サービスでは工場ではなく、これを使用できます。 – Veera

+0

はい、このサービスで使用する必要がありますが、工場でも使用できます。https://codepen.io/sumit-jaiswal/pen/xrJLxE?editors=1111 –

2

てみてください。そしてまた、 `getAuthenticatedAccount`機能は[return文](https://developer.mozilla.org/en-US/docs/Web/JavaScript/を必要this-

angular.module('authentication.service', [ 
]) 

.factory('Authentication', ['$state', '$cookies', '$http', 'app', 'routes', 'cfCryptoHttpInterceptor', 
    function($state, $cookies, $http, app, routes, cfCryptoHttpInterceptor) { 

    var ABCKey=null; 

    var setAuthenticatedAccount = function (account, tokenAuth) { 
     var accountInfo = {'email': account.email, 'username': account.username, 'token': tokenAuth} 
     var abc = CryptoJS.enc.Base64.parse(account.abc); 

     setABCKey(abc); 

     console.log(showABCKey()) 

    } 

    var getAuthenticatedAccount = function() { 
     if(!$cookies.authenticatedAccount) { 
      return; 
     } 

     console.log(showABCKey()) 

    } 


    var setABCKey = function(key) { 
     ABCKey = key; 
    }; 

    var showABCKey = function() { 
     return ABCKey; 
    }; 

    var Authentication = { 
     setAuthenticatedAccount: setAuthenticatedAccount, 
     getAuthenticatedAccount: getAuthenticatedAccount, 
     setABCKey: setABCKey, 
     showABCKey: showABCKey 
    }; 

    return Authentication; 
}]); 
+0

このようにして、console.logは "null"を返します。 – Mateus

関連する問題