大家好,我在角度工厂遇到了一些问题。试图从工厂调用我的控制器中的函数,该函数使用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
。什么想法可能会发生什么?
答案 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;
});