更好的设计方法来传递数据给其他ng-view并在控制器之间持久化。
更好的设计方法来传递数据给其他ng-view并在控制器之间持久化。
我开始使用AngularJS进行开发。我不确定这种方法是在我的视图之间传递数据的正确设计。
目前,我有一个加载器页面,在那里我做一些请求。
function PeopleController($scope,$http,$location){ $http.get('/location/-79.18925/43.77596'). success(function(data){ $scope.savePeopleResponse(data); $location.url('/test'); }); }
然后在被加载到/test的视图中,我只是调用
{{getResultForPeople()|json}}
[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; } });
现在,如您所见,如果此应用程序变得越来越大,这将变得非常混乱。处理数据,以便跨控制器保持持久化的最佳方法是什么?
admin 更改状态以发布 2023年5月23日
您可以通过创建自己的服务(如此博客所描述得很好)来在控制器之间保留数据。您还可以参考此问题。
在您的情况下,您可以将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"
。