工厂内的角度工厂访问方法有此。我得到了未定义的功能

时间:2015-02-05 13:53:56

标签: angularjs factory self

大家好,我在角度工厂遇到了一些问题。试图从工厂调用我的控制器中的函数,该函数使用this调用同一工厂中的另一个函数。但我总是得到控制台"错误未定义不是一个功能"

angular.module('psJwtApp').factory('authToken', function ($window) {
  var storage = $window.localStorage;
  var cachedToken;
  return {
    setToken: function(token){
      cachedToken = token;
      storage.setItem('userToken', token);
    },
    getToken: function(){
      if(!cachedToken) 
        {cachedToken = storage.getItem('userToken');}

        return cachedToken; 
    },
    isAuthenticated: function() {
      return !!self.getToken();

    }
  };
});

然后我在角度控制器中调用它:

angular.module('psJwtApp').controller('HeaderCtrl', function ($scope, authToken) {
  $scope.isAuthenticated = authToken.isAuthenticated; 
});

非常感谢任何帮助。我尝试将getToken称为this,将self称为authToken.getToken。没有。如果我安慰authToken.getToken,我会undefined。什么想法可能会发生什么?

1 个答案:

答案 0 :(得分:3)

最后通过声明对象内的所有函数并返回该对象来解决此问题。然后简单地调用authToken.getToken,这一切在我的世界中运作良好!

angular.module('psJwtApp').factory('authToken', function ($window) {
var storage = $window.localStorage;
var cachedToken;
var userToken = 'userToken';
var authToken = {
    setToken: function(token){
      cachedToken = token;
      storage.setItem( userToken, token);
    },
    getToken: function(){
      if(!cachedToken) 
        {cachedToken = storage.getItem(userToken)};
        return cachedToken; 
    },
    isAuthenticated: function() {
      return !!authToken.getToken();
    },
    removeToken: function() {
      cachedToken = null;
      storage.removeItem(userToken);
    }
  };
  return authToken;

});