2013-06-01 14 views
31

Napisałem usługę w AngularJS, ale nie mogę jej zmusić do pracy z ziarnistym materiałem siewnym.Wstrzykiwanie serwisowe do kontrolera za pomocą AngularJS

Kod kontroler jest w następujący sposób:

/*function PhotoCtrl($scope, Photo) { 
    $scope.photos = Photo.query(); 
}*/ 

angular.module('myApp.controllers', []). 
    controller('PhotoCtrl', [function($scope,Photo) { 
    $scope.photos = Photo.query(); 
}]) 
.controller('MyCtrl2', [function() { 

}]); 

Należy pamiętać, że wypowiedziało się sekcja działa dobrze, ale chciałbym się nią trochę jak (zalecane) drugi sposób.

Błąd pojawia jest to, że zdjęcie jest niezdefiniowany, więc moje przypuszczenie byłaby moja metoda przekazywania (wstrzyknięcie) to jest źle, ale nie mogę dowiedzieć się, jak to zrobić poprawnie

+0

O ile wiem, pierwsza metoda jest po prostu w porządku, wierzę, że to, co jest pokazane w oficjalnym poradniku dla przykładu. Czy masz jakieś źródła, które wskazują inaczej? –

+0

"UWAGA: Wiele przykładów w dokumentacji pokazuje tworzenie funkcji w zasięgu globalnym.To tylko dla celów demonstracyjnych ......." z http://docs.angularjs.org/guide/dev_guide. mvc.understanding_controller wydaje się tak mówić. Nie zrozum mnie źle, myślę, że pierwszy jest łatwiejszy do odczytania, ale rozumiem, że odstępy między nazwami mogą być lepsze – Maarten

+0

Jeśli usuniesz zawijanie nawiasów kwadratowych wokół definicji funkcji kontrolera '[funkcja ($ scope, Photo) {}]' ty Wszystko będzie dobrze, ale nie rób tego, jeśli planujesz zminimalizować kod. Więcej informacji na temat [wstrzykiwania zależności w kątowym tutaj] (http://docs.angularjs.org/guide/di) –

Odpowiedz

53

Trzeba zdefiniować usługa Photo:

angular.module('myApp.controllers', []) 
    .service('Photo', ['$log', function ($log) { 

     return { 
      query: function() { 
       // the query code here. 
      } 
     }; 

    }]) 
    .controller('PhotoCtrl', ['$scope', 'Photo', function ($scope, Photo) { 
     $scope.photos = Photo.query(); 
    }]) 
    .controller('MyCtrl2', [function() { 

    }]); 

kilka odniesień:

W powyższym kodzie przykładowym użyłem aliasingu parametrów, co sugeruję, aby uniknąć problemów przy minimalizacji kodu.

Patrz także przykład tutaj: AngularJS multiple uses of Controller and rootScope

I Plunker tutaj: http://plnkr.co/edit/Bzjruq

+1

Zdefiniowałem usługę, ale twoja odpowiedź naprawiła to, ponieważ dałeś właściwą składnię dla linii kontrolera, nie wiedziałem, że musiałem podać zakres i zdjęcie w tym stylu, porównaj to z moim przykładem, aby zobaczyć mój problem. – Maarten

+0

Cieszę się, że mogę pomóc i witam w AngularJS. –

+1

Zauważ, że musisz także – kayfun

Powiązane problemy