【发布时间】:2015-02-05 13:53:55
【问题描述】:
大家好,我在使用 Angular 工厂时遇到了一些问题。试图从工厂调用我的控制器中的一个函数,该函数使用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。任何想法可能会发生什么?
【问题讨论】:
-
var self=this在哪里?也许你忘了? -
我认为问题之一是您在方法调用结束时缺少
():$scope.isAuthenticated = authToken.isAuthenticated();。 -
@ViníciusGobboA.deOliveira 感谢您的建议,当我将其声明为 authToken.isAuthenticated();我仍然得到 undefined is not a function.
-
@anvarik sorry var self=this 也给了我未定义的功能。如果我在我的 ctrl 上将其声明为 authToken.isAuthenticated(); chrome 将错误指向控制器。如果我声明为 authToken.isAuthenticated 并执行 this.IsAuthenticated,则 chrome 指向实际的工厂文件以及我调用 this.isAuthenticated 或 self..isAuthenticated 的行。即使将 var self 设置为此
-
@jsrosas 你应该可以使用
this.getToken不需要自我,并发布你的完整代码