Design migliore per il trasferimento dei dati ad altri ng-view e la loro persistenza su tutti i controller

Ho iniziato a sviluppare in AngularJS. Sono confuso se questo è un design appropriato per passare i dati tra le mie viste parziali.

In questo momento ho una pagina del caricatore in cui faccio qualche richiesta.

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

Quindi nella vista che viene caricata per / test

Sto solo chiamando

 
{{getResultForPeople()|json}}

[ResultController]

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

e savePeopleResponse e getResultForPeople sono “memorizzati nella cache” nel rootScope come tale

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

Ora come puoi vedere, questo diventerà molto confuso se questa applicazione diventerà sempre più grande. Qual è il modo migliore per gestire i dati in modo che siano persistenti tra i controller?

È ansible mantenere i dati tra i controller creando il proprio servizio come descritto in questo blog . Puoi anche fare riferimento a questa domanda .

Nel tuo caso puoi spostare savePeopleResponse e getPeopleResponse in un servizio e quindi iniettare il servizio in qualsiasi controller a cui desideri accedere.

 angular.module('myApp', []) .factory('peopleService', function () { var peopleResponse = {}; return { savePeopleResponse:function (data) { peopleResponse = data; console.log(data); }, getPeopleResponse:function () { return peopleResponse; } }; }); 

Con il tuo controller qualcosa del genere:

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

Con questo esempio di codice, assicurati di includere ng-app="myApp"