我正在开发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
变量,它包含所有字段 - id
,userName
,userRole
,但是当我打印Session.id
时,我得到了未定义的值。
如何访问这些字段?
谢谢,Zbynek
答案 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);
电话后移动记录。