更好的设计方法来传递数据给其他ng-view并在控制器之间持久化。

10 浏览
0 Comments

更好的设计方法来传递数据给其他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日
0
0 Comments

您可以通过创建自己的服务(如此博客所描述得很好)来在控制器之间保留数据。您还可以参考此问题

在您的情况下,您可以将savePeopleResponsegetPeopleResponse移到一个服务中,然后在您希望访问它的任何控制器中注入该服务。

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"

0