Angularjs $ rootScope не виден в контроллерах

0

все! Я создаю приложение с разрешением. Для хранения пользовательских данных во время сеанса я использую такую службу:

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 и т.д., Он не работает. Что не так?

  • 0
    Почему вы храните свои данные в $rootScope ? Это сервис, поэтому единственный, поэтому вы можете внедрить его в каждый контроллер, который вам нужен, и это будет тот же экземпляр.
  • 0
    Вы имеете в виду добавить что-то вроде: controllerTitle ['$ inject'] = ['Session']; Какой другой способ хранить данные во время сеанса?
Показать ещё 3 комментария
Теги:
authentication

1 ответ

1
Лучший ответ

Вы должны это делать:

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".

  • 0
    Yeap! оно работает. благодарю вас!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню