2012-10-23 4 views
5

J'ai une application CRUD typique avec des routes et des contrôleurs séparés pour la vue de liste ainsi que les vues détaillées.Transmettre les données de la vue liste à la vue détaillée dans angular.js

Les données de la liste sont récupérées à l'aide d'un $resource.

Actuellement dans mon contrôleur de vue détaillée, je récupère l'élément à partir du serveur à l'aide du $resource, ce qui entraîne une requête http supplémentaire. Au lieu de cela, puisque dans mon contrôleur de liste j'ai déjà l'élément que je suis en train d'éditer, je voudrais passer cet élément du contrôleur de liste au contrôleur de détail.

Mais je ne sais pas comment. Je peux faire un seul contrôleur pour les deux vues, mais cela ne semble pas correct.

Aidez-nous s'il vous plaît.

Répondre

4

Vous pouvez utiliser un service pour partager des données entre les contrôleurs:

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

ou un violon je l'ai écrit il y a quelque temps: 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

grâce, dans l'usine vous attachez une dictionnaire à $ rootScope. Mais le but d'un service partagé est d'éviter la pollution de la racine. Donc, si je dois attacher quelque chose à la portée racine, je pourrais tout aussi bien ne pas utiliser un service partagé mais utiliser $ rootScope directement, non? Pourriez-vous expliquer cela? – akonsu

+0

oui c'est mauvaise conception vous avez raison, vous devez attacher les données de service dans les étendues de contrôleur à partir du code du contrôleur :) – Guillaume86

+0

Cela semble trop compliqué. Voici un exemple très simple: http://jsfiddle.net/HarzR/ –

Questions connexes