错误:this.getToken不是函数

时间:2016-02-27 12:26:03

标签: javascript angularjs factory ng-show

我有一个工厂,它返回3个函数:setTokengetTokenisAuthenticated。前两个函数是预定义的,最后一个函数使用getToken调用this.getToken函数。

当将工厂注入控制器时,我使用isAuthenticated()调用第三个函数(ng-show)。我在控制台中收到以下错误:

  

错误:this.getToken不是函数
  .isAuthenticated @ http://localhost:9000/scripts/services/authtoken.js:22:16

任何人都能帮我解决我做错的事吗?

工厂:

'use strict';

angular.module('psJwtApp').factory('authToken', function($window) {
  //define storage
  var storage = $window.localStorage;
  var cachedToken;

  // Public API here
  return {
    setToken: function(token) {
      cachedToken = token;
      storage.setItem('userToken', token);
    },
    getToken: function() {
      if (!cachedToken) {
        cachedToken = storage.getItem('userToken');
      }
      return cachedToken;
    },
    isAuthenticated: function() {
      //return true if we get something from getToken
      return !!this.getToken();
    }
  };

});

控制器:

'use strict';

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

视图:

  <ul class="nav navbar-nav">
    <li ui-sref-active="active">
      <a ui-sref="main">Home</a>
    </li>
    <li ng-hide="isAuthenticated()" ui-sref-active="active">
      <a ui-sref="register">Register</a>
    </li>
    <li ng-show="isAuthenticated()" ui-sref-active="active">
      <a ui-sref="logout">Logout</a>
    </li>
  </ul>

如果您认为有任何遗漏或需要更多信息,请询问我是否已将其添加到问题中。

1 个答案:

答案 0 :(得分:2)

getToken是您在工厂中公开的对象的静态方法,因此您无法使用this引用它。但是你可以这样做:

'use strict';

angular.module('psJwtApp').factory('authToken', function($window) {
  //define storage
  var storage = $window.localStorage;
  var cachedToken;

  var setToken = function(token) {
    cachedToken = token;
    storage.setItem('userToken', token);
  };
  var getToken = function() {
    if (!cachedToken) {
      cachedToken = storage.getItem('userToken');
    }
    return cachedToken;
  };
  var isAuthenticated = function() {
    //return true if we get something from getToken
    return !!getToken();
  };

  // Public API here
  return {
    setToken: setToken,
    getToken: getToken,
    isAuthenticated: isAuthenticated
  };

});