angularjs – 更好的设计,将数据传递到其他ng-view,并在控制器上持久化

前端之家收集整理的这篇文章主要介绍了angularjs – 更好的设计,将数据传递到其他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加载

我只是打电话

<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;
}

有了这个代码示例,请确保您包括ng-app =“myApp”

猜你在找的Angularjs相关文章