我今天早上开始在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在rootScope中被“缓存”
app.run(function($rootScope) { var peopleResponse = {}; $rootScope.savePeopleResponse = function(data) { peopleResponse = data; console.log(data); } $rootScope.getPeopleResponse = function(){ return peopleResponse; } });
现在你可以看到,如果这个应用程序越来越大,这将变得非常混乱。什么是处理数据的最佳方式,以便其持续存在于控制器?
您可以通过
creating your own service在控制器之间持久化数据,如
this blog中所述。您还可以参考
this question。
在你的情况下,你可以将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; }