2013-06-01 99 views
31

我已經在AngularJS中編寫了一個服務,但是我無法使用angular-seed的方式來處理它。通過AngularJS向服務器注入控制器

控制器代碼如下:

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

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

}]); 

注意,註釋掉部分工作正常,但我想在一定程度上處理它像(推薦)第二種方法。

我得到的錯誤是,照片是不確定的,所以我的猜測是我路過(注入)這是錯誤的方法,但我不能找出如何做是正確的

+0

據我所知道的第一個方法是蠻好的,我相信這就是在例如官方教程所示的界面。你有任何來源表明否則? –

+0

「注意:文檔中的許多示例顯示了在全局範圍內創建函數,這僅用於演示.......」來自http://docs.angularjs.org/guide/dev_guide。 mvc.understanding_controller似乎這樣說。不要誤解我的意思,我認爲第一個更容易閱讀,但是我明白名稱間隔可能會更好 – Maarten

+0

如果您在控制器函數定義'[function($ scope,Photo){}]''上移除了方括號也可以,但是如果你打算縮減你的代碼,不要這樣做。更多關於[在這裏依賴注入角](http://docs.angularjs.org/guide/di) –

回答

53

您需要定義在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() { 

    }]); 

一對夫婦引用:

在上面的示例代碼中,我使用了參數別名,爲避免縮小代碼時出現問題,建議使用參數別名。

在此還看到一個例子:這裏 AngularJS multiple uses of Controller and rootScope

並有Plunker: http://plnkr.co/edit/Bzjruq

+1

我已經定義了服務,但你的答案解決了它,因爲你給控制器線提供了正確的語法,我不知道我必須在那裏傳遞範圍和照片,將它與我的示例進行比較以查看我的問題 – Maarten

+0

很高興能提供幫助,並歡迎來到AngularJS。 –

+1

請注意,您還必須 – kayfun