29

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>

[結果コントローラー]

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

ご覧のとおり、このアプリケーションがどんどん大きくなると、これは非常に厄介になります。コントローラ間で永続化されるようにデータを処理する最良の方法は何ですか?

4

1 に答える 1

55

このブログで詳しく説明されているように、独自のサービスを作成することで、コントローラー間でデータを永続化できます。この質問も参照できます。

あなたの場合、savePeopleResponseandgetPeopleResponseをサービスに移動してから、アクセスしたいコントローラーにサービスを挿入できます。

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"

于 2012-09-25T00:44:21.477 に答える