все! Я создаю приложение с разрешением. Для хранения пользовательских данных во время сеанса я использую такую службу:
app.service('Session', function ($rootScope, $cookies) {
var Session = $rootScope.$new();
Session.createSession = function (accessTo, level, user_data) {
this.level = level;
this.accessTo = accessTo;
if(user_data) {
$cookies.isAuth = true;
} else {
$cookies.isAuth = false;
}
this.user = {
email : user_data.email,
fullname : user_data.fullname,
id : user_data.id,
level : user_data.level
}
if(accessTo && accessTo.length == 1 && !$cookies.account) {
this.account = accessTo[0].id;
$cookies.account = accessTo[0].id;
} else {
this.account = $cookies.account;
}
};
Session.destroy = function () {
this.level = null;
this.account = null;
this.user = null;
this.isAuth = false;
$cookies.account = null;
};
return Session;
});
В контроллере:
Session.createSession(some, params, here);
Вспомните, что он помещает некоторые данные в корневой каталог, и я могу показать его в консоли, но когда я пытаюсь увидеть, например, Session.user/.level и т.д., Он не работает. Что не так?
Вы должны это делать:
app.service('Session', function() {
// A service is a singleton, as in it a persistent
// object you can inject in controllers
this.foo = 'bar'; // anything on "this" is publicly available
this.createSession = function() { ... };
// you can also expose functions that you can call from the controllers
});
app.controller('Ctrl1', function($scope, Session) {
// You can inject "Session" here and use stuff you
// added on "this" inside of it
$scope.foo = Session.foo;
// you can put stuff on the controller $scope
// and you can bind to it in your HTML by using <span>{{foo}}</span>
Session.foo = 'baz';
// you can change stuff in the service and it will be persisted
});
Итак, теперь, если вы перейдете к определенному "Ctrl2", который также добавит "Session", Session.foo
будет "baz", а не начальным значением "bar".
$rootScope
? Это сервис, поэтому единственный, поэтому вы можете внедрить его в каждый контроллер, который вам нужен, и это будет тот же экземпляр.