无法在angularjs中检索服务对象属性

时间:2015-06-16 13:10:44

标签: angularjs session

我正在开发angularjs中的应用程序,并希望存储一些会话变量。

我的app.js代码包含控制器,服务和工厂:

(function(){
  var app = angular.module('test', []);

app.controller('ApplicationController', function ($scope,
                                               AuthService, Session) {
  $scope.currentUser = null;
  this.Session = Session;
  console.log(Session);
  console.log(Session.id);

  $scope.isAuthenticated = AuthService.isAuthenticated;

  if (!$scope.isAuthenticated()) {
    AuthService.login();
  }

});

app.service('Session', function () {

    var session = {};

    session.create = function(sessionId, userId, userRole) {
        session.id = sessionId;
        session.userLogin = userId;
        session.userRole = userRole;
    };

    session.destroy = function () {
        session.id = null;
        session.userLogin = null;
        session.userRole = null;
    };

    return session;
});

  app.factory('AuthService', function ($http, Session) {
    var authService = {};

    authService.login = function () {
      return $http
        .get('authenticate.php')
        .then(function (res) {
          Session.create(res.data.session_id, res.data.login, res.data.role_id);
        });
    };

    authService.isAuthenticated = function () {
      return !!Session.id;
    }

    return authService;
  });

})();

authenticate.php可以包含例如json:

{"session_id":"076d89db-141a-11e5-8e8f-18a9059996df","login":"test","role_id":"2","error":null}

问题是,我无法检索会话变量(Session对象的字段),即使它们已设置。在控制器初始化期间,我打印Session变量,它包含所有字段 - iduserNameuserRole,但是当我打印Session.id时,我得到了未定义的值。

如何访问这些字段?

谢谢,Zbynek

3 个答案:

答案 0 :(得分:0)

我个人从来没有使用this语法进行服务,也不知道它是如何工作的 - 我使用了以下类型的语法,它对服务函数和存储变量都有效。

app.service('Session', function () {

    var session = {};

    session.create = function(sessionId, userId, userRole) {
        session.id = sessionId;
        session.userLogin = userId;
        session.userRole = userRole;
    };

    session.destroy = function () {
        session.id = null;
        session.userLogin = null;
        session.userRole = null;
    };

    return session;
});

答案 1 :(得分:0)

尝试这样:

app.service('Session', function () {
  var session = this;
  this.create = function (sessionId, userId, userRole) {
    session.id = sessionId;
    session.userLogin = userId;
    session.userRole = userRole;
  };

  this.destroy = function () {
    session.id = null;
    session.userLogin = null;
    session.userRole = null;
  };
});

答案 2 :(得分:0)

嗯,控制台日志记录发生在AuthService开始创建Session之前,另外还使用异步http请求 - 所以我确信它的成员在那时总是未定义。

尝试在Session.create(res.data.session_id, res.data.login, res.data.role_id);电话后移动记录。

相关问题