2012-10-23 35 views
5

Ich habe eine typische CRUD-App mit separaten Routen und Controllern für die Listenansicht sowie die Detailansichten.Übergabe von Daten aus der Listenansicht zur Detailansicht in angular.js

Die Daten für die Liste werden unter Verwendung einer $resource abgerufen.

Zur Zeit in meiner Detailansicht Controller Ich hole das Element vom Server mit dem $resource, was zu einer zusätzlichen HTTP-Anfrage führt.

Stattdessen, da ich in meinem Listen-Controller bereits das Element habe, das ich bearbeite, würde ich gerne dieses Element vom Listen-Controller an den Detail-Controller übergeben.

Aber ich weiß nicht wie. Ich kann einen einzigen Controller für beide Ansichten machen, aber das scheint nicht richtig zu sein.

Bitte helfen.

Antwort

4

können Sie einen Dienst verwenden, um Daten zwischen den Controllern zu teilen:

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

oder eine Geige ich vor einiger Zeit schrieb: 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

Dank, in der Fabrik Sie befestigen ein Wörterbuch zu $ ​​rootScope. Ziel eines gemeinsamen Dienstes ist es jedoch, eine Verschmutzung der Wurzelbereiche zu vermeiden. Wenn ich also etwas an den Root-Bereich anhängen müsste, könnte ich genauso gut keinen Shared-Service verwenden, sondern $ rootScope direkt verwenden, nicht? Könnten Sie das erklären? – akonsu

+0

ja es ist schlechtes Design du hast recht, du solltest die Servicedaten in den Controller-Scopes aus dem Controller-Code anhängen :) – Guillaume86

+0

Das scheint übermäßig kompliziert. Hier ist ein sehr einfaches Beispiel: http://jsfiddle.net/HarzR/ –

Verwandte Themen