2012-10-23 14 views
5

Mam typową aplikację CRUD z oddzielnymi trasami i kontrolerami do widoku listy oraz widoków szczegółów.przekazywanie danych z widoku listy do widoku szczegółowego w angular.js

Dane do listy są pobierane za pomocą $resource.

Obecnie w widoku szczegółowym kontroler pobieram element z serwera przy użyciu $resource, co powoduje dodatkowe żądanie http.

Zamiast tego, ponieważ w moim kontrolerze listy już mam element, który edytuję, chciałbym przekazać ten element ze sterownika listy do kontrolera szczegółu.

Ale nie wiem jak. Mogę utworzyć jeden kontroler dla obu widoków, ale to nie wydaje się właściwe.

Proszę o pomoc.

Odpowiedz

4

Można skorzystać z usługi udostępniania danych między kontrolerami:

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

lub skrzypce pisałem jakiś czas temu: 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

dzięki, w fabryce dołączeniu słownik do $ rootScope. Jednak celem wspólnej usługi jest unikanie zanieczyszczenia zakresu głównego. Więc jeśli muszę dołączyć coś do zakresu głównego, mogę równie dobrze nie korzystać z usługi wspólnej, ale użyć $ rootScope bezpośrednio, nie? Czy możesz to wyjaśnić? – akonsu

+0

Tak, to jest zły projekt, masz rację, powinieneś dołączyć dane serwisowe w zakresach kontrolera z kodu kontrolera :) – Guillaume86

+0

Wydaje się to zbyt skomplikowane. Oto bardzo prosty przykład: http://jsfiddle.net/HarzR/ –

Powiązane problemy