Подтвердить что ты не робот

Улучшенный дизайн для передачи данных в другие виды ng-просмотра и их сохранения в контроллерах

Я начал развиваться в AngularJS. Я смущен относительно того, является ли это надлежащим дизайном для передачи данных между моими частичными представлениями.

Сейчас у меня есть страница загрузчика, где я делаю запрос.

function PeopleController($scope,$http,$location){
    $http.get('/location/-79.18925/43.77596').
    success(function(data){
      $scope.savePeopleResponse(data);
      $location.url('/test');
    });
}

Затем в представлении, которое загружается для /test

Я просто звоню

<div ng-controller="resultController">
    <div class="blueitem">{{getResultForPeople()|json}}</div>
</div>

[resultController]

    function resultController($scope){
      $scope.getResultForPeople = function(){
     return $scope.getPeopleResponse();
    }
}

и savePeopleResponse и getResultForPeople "кэшируются" в корневой системе как таковой

app.run(function($rootScope) {
  var peopleResponse = {};
  $rootScope.savePeopleResponse = function(data) {
   peopleResponse = data;
   console.log(data);
  }

  $rootScope.getPeopleResponse = function(){
    return peopleResponse;
  }
});

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

4b9b3361

Ответ 1

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

В вашем случае вы можете переместить ваши savePeopleResponse и getPeopleResponse в службу, а затем ввести службу в любые контроллеры, к которым вы хотели бы получить доступ.

angular.module('myApp', [])
    .factory('peopleService', function () {
        var peopleResponse = {};

        return {
            savePeopleResponse:function (data) {
                peopleResponse = data;
                console.log(data);
            },
            getPeopleResponse:function () {
                return peopleResponse;
            }
        };
    });

С вашим контроллером что-то вроде этого:

function resultController ($scope, peopleService) {
    $scope.getResultForPeople = peopleService.getPeopleResponse;
}

В этом примере кода убедитесь, что вы включили ng-app="myApp"