Задать вопрос

Как использовать factory как хранилище данных между контролерами?

Здравствуйте!
Изучаю angular и столкнулся со следующей проблемой.

Разные контроллеры используют одни и те же данные, потому решил хранить их в factory.
Но не могу понять, почему в таком случае возвращается переменная dbListWithTables = null, когда в консоль выводится правильный объект.

Код фабрики:
'use strict';

angular.module('labApp').factory('StorageFactory', ['$http', function ($http) {
    var storage = {};
    var err = '';
    var dbList = null;
    var dbListWithTables = null;

    storage.getDbListWithTables = function() {
        var conf = {
            method: 'GET',
            url: '/php/getDbInfoFull.php'
        };

        $http(conf).then(
            function successCallback(success) {
                console.log(success.data);
                dbListWithTables = success.data;
            },
            function errorCallback(error) {
                err = error.data;
            }
        );

        return dbListWithTables;
    };

    return storage;
}]);


Код контроллера, где вызывается функция getDbListWithTables()
'use strict';

angular.module('labApp').controller('navCtrl', ['$scope', 'StorageFactory', function ($scope, StorageFactory) {

    $scope.storage = StorageFactory;

    if ($scope.dbListFull === undefined) {
        $scope.dbListFull = $scope.storage.getDbListWithTables();
    }

}]);


Подскажите, пожалуйста, в чем может быть проблема?
  • Вопрос задан
  • 158 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
1. "factory" это способ порождения сервиса. То есть хранить данные вы будете в сервисе. Ну и такой момент - вы там не храните данные а храните логику получения этих данных.
2. почитайте про анонимные функции, не надо указывать имена для колбэков
3. почитайте про промисы, это решит вашу проблему. Так же почитайте про event loop в javascript, про то как работать с асинхронными операциями и т.д.
4. Очень удобно такие вещи выносить в резолверы, оставляя контроллеры максимально тупыми
5. компоненты. Подход с регистрацией "независимых контроллеров" считается устаревшим.

Последние два пункта обязательны к изучению но не прямо сейчас. Это если вы захотите научиться делать "удобно".
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы