Как работать с пользовательской моделью в приложении AngularJS?

0

Я рефакторинг приложения AngularJS, и там почти все хранится в $rootScope.

В моих старых приложениях, которые я создал с помощью Angular, я создал службу для каждой модели, а затем создавал ее в контроллере, когда это необходимо.

Я спрашиваю себя: нормально ли хранить весь пользовательский объект внутри $ rootScope или что здесь лучше?

Как я могу убедиться, что вы создали пользователя во время входа в систему, а затем передаете его по всему приложению?

  • 0
    Нет ничего плохого в хранении моделей в $ rootScope и построении директив, которые находят модели по правилам наследования областей.
Теги:
rootscope

3 ответа

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

Похоже, что в общем случае пользовательские модели, например, в $ rootScope, сохраняются. Но, на мой взгляд, это не лучшая практика в angularjs (однако раньше я использовал $ rootScope).

Фабрика является одной из красот angularjs. Обычно мы используем его для вызова служб отдыха. Но вы также можете создать модель с ней. Также вы сможете легко расширить свою модель с помощью инъекции другой модели. Это просто идея, может быть, есть еще один лучший вариант использования таких моделей, как объекты в angularjs.

Давайте посмотрим пример

 // User Model   
 app.factory('User', function() {
    var User = function(username) {
        this.username = username;
        this.email = null;
    };

    User.prototype.getDetails = function() {
        var self = this;
        return self.username;
    };

    return User;
});

// ExtendedUser Model
app.factory('ExtendedUser', function(User) {
    var ExtendedUser = function() {
       User.apply(this, arguments);
    };

    ExtendedUser.prototype = new User();

    function getEmail() {
       var self = this;
       // You can make an http call to get email like information as an extra
       self.email = "[email protected]";
       return self;
    }

    ExtendedUser.prototype.getDetails = function() {
       var self = this;
       var extendedUser = getEmail();
       return extendedUser;
    };
    return ExtendedUser;
});
1

Я бы посмотрел на a0-угловое хранилище: https://github.com/auth0/angular-storage. Это отлично подходит для хранения информации пользователя/токенов или любого другого, что можно найти во всем приложении.

Ключевая особенность

Использует localStorage или sessionStorage по умолчанию, но если он недоступен, он использует ngCookies. Позволяет вам сохранять объекты JS. Если вы сохраняете номер, вы получаете Number, а не строку. Использует систему кэширования, чтобы, если у вас уже есть значение, она не получит ее из магазина снова.

0

Если вы не хотите хранить пользовательскую модель в $rootScope вы можете использовать приватную переменную JS, к которой можно обратиться с помощью некоторой услуги в Angular (поскольку как фабрика, так и служба являются одиночными в Angular).

Приятным дополнением является то, что сложнее определить, где хранится пользовательская модель, единственное, что вам нужно, это правильная инкапсуляция и структура кода.

Ещё вопросы

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