2012-10-23 13 views
5

リストビューと詳細ビューに別々のルートとコントローラを持つ典型的なCRUDアプリがあります。リストビューからangular.jsの詳細ビューにデータを渡す

リストのデータは、$resourceを使用して取得されます。

現在、私の詳細ビューコントローラでは、$resourceを使用してサーバーからアイテムを取得し、追加のHTTP要求を発生させます。

代わりに、自分のリストコントローラに私が編集中のアイテムが既にあるので、このアイテムをリストコントローラから詳細コントローラに渡したいと思います。

しかし、私はどのようにわかりません。私は両方のビューのための1つのコントローラを作ることができますが、これは正しくないようです。

助けてください。

答えて

4

あなたはコントローラ間でデータを共有するためのサービスを使用することができます。

exemple:https://groups.google.com/d/msg/angular/IjKY_CRyRno/kP0M_LTzOTkJ

または私はいくつかの時間前に書いたフィドル:あなたは添付の工場でhttp://jsfiddle.net/XqDxG/169/

myModule.factory('mySharedService', function($rootScope) { 
    var sharedService = {}; 
    sharedService.data = {}; 
    sharedService.data.message = ''; 

    return sharedService; 
}); 

function ControllerZero($scope, sharedService) { 
    // expose service data to angular scope 
    $scope.sharedData = sharedService.data; 

    $scope.handleClick = function(msg) { 
     sharedService.data.message = msg;    
    }; 

    $scope.$watch('sharedData.message', function(msg) { 
     $scope.message = msg; 
    }); 
} 

function ControllerOne($scope, sharedService) { 
    $scope.sharedData = sharedService.data; 

    $scope.$watch('sharedData.message', function() { 
     $scope.message = 'ONE: ' + sharedService.data.message; 
    }); 
} 
+0

おかげで、 $ rootScopeに辞書を追加します。しかし、共有サービスの目的は、ルート範囲の汚染を避けることです。 rootスコープに何かを付ける必要がある場合、共有サービスを使用せずに$ rootScopeを直接使用することもできます。これを説明できますか? – akonsu

+0

はい、あなたは正しい設計ですが、コントローラーコードからコントローラースコープのサービスデータを添付する必要があります。 – Guillaume86

+0

これはあまりにも複雑に思えます。ここには非常に基本的な例があります:http://jsfiddle.net/HarzR/ –