AngularJS - Невозможно получить данные из сервиса - PullRequest
0 голосов
/ 25 мая 2018

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

https://www.codementor.io/justinobney/keeping-angular-service-list-data-in-sync-with-controllers-a2hlwgwva

По какой-то причине с моей настройкой это, похоже, не работает для меня.Мои контроллеры возвращаются либо пустыми, либо просто не работают.Кто-нибудь знает, почему этот подход не работает?

Главный контроллер:

GDI_App.controller('Form_Controller', function ($scope, Service) {

    Service.get_data();

    //What I tried so far:
    $scope.Current.incidents = Service.Current.data; //returns nothing.
    $scope.Current.incidents = Service.current_data(); //returns [];

});

Служба:

GDI_App.factory('Service', function($q) {

    var Current ={}
    Current.Data = [];

    return{

        get_data: function(){

            var Fake_Data = [
               { "Data1": "123123", "Data2": "15437"  },
               { "Data1": "432234", "Data2": "146"  },
               { "Data1": "45654", "Data2": "3534"  },
               { "Data1": "76587", "Data2": "78978"  },
               { "Data1": "2342", "Data2": "5345878"  },
               { "Data1": "178", "Data2": "34534"  },
               { "Data1": "173838", "Data2": "354534"  },
            ];

            return $q.when(Fake_Data)
            .then(function(data) {
                angular.copy(data, Current.Data);
            });

        }

        current_data: function(){
            return Current.Data;
        }

    }
});

Ответы [ 2 ]

0 голосов
/ 25 мая 2018

Я бы предложил вам использовать пользовательское обещание.В контроллере вместо возврата метода непосредственно в свойство установите значение обратного вызова для свойства.

get_data: function(){
var deferred=$q.defer();
            var Fake_Data = [
               { "Data1": "123123", "Data2": "15437"  },
               { "Data1": "432234", "Data2": "146"  },
               { "Data1": "45654", "Data2": "3534"  },
               { "Data1": "76587", "Data2": "78978"  },
               { "Data1": "2342", "Data2": "5345878"  },
               { "Data1": "178", "Data2": "34534"  },
               { "Data1": "173838", "Data2": "354534"  },
            ];
            $q.when(Fake_Data)
            .then(function(data) {
               deferred.resolve(data)
            });
return deferred.promise;
}

GDI_App.controller('Form_Controller', function ($scope, Service) {

    Service.get_data().then(function(data){
$scope.Current.incidents=data;
     });

});
0 голосов
/ 25 мая 2018

Зачем вам нужна копия?просто верните данные

 get_data: function(){
            var Fake_Data = [
               { "Data1": "123123", "Data2": "15437"  },
               { "Data1": "432234", "Data2": "146"  },
               { "Data1": "45654", "Data2": "3534"  },
               { "Data1": "76587", "Data2": "78978"  },
               { "Data1": "2342", "Data2": "5345878"  },
               { "Data1": "178", "Data2": "34534"  },
               { "Data1": "173838", "Data2": "354534"  },
            ];
            return $q.when(Fake_Data)
            .then(function(data) {
                angular.copy(data, Current.Data);
                return data;
            });
}

, а затем

$scope.Current.incidents = Service.get_data();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...