2013-04-16 28 views
4

這裏是我的控制器:angularjs微小問題

angular.module('domiciliations').controller('mandatsCtrl', ['$scope', 'Domiciliation', 'logger', function ($scope, Domiciliation, logger) { 
    $scope.mandats = Domiciliation.query(); 

    $scope.fullName = function() { 
     return this.Person ? 'test' : 'test2' 
    } 

    $scope.isNextDisabled = function() { 
     return false; 
    } 

    $scope.isPrevDisabled = function() { 
     return true; 
    } 

    $scope.next = function() { 
     logger.info("test"); 
    } 
}]); 

當精縮,我得到一個錯誤:

Error: Unknown provider: nProvider <- n 

現在,如果我有我的控制器之後,下面的行,然後它的工作原理:

mandatsCtrl.$inject = ['$scope', 'Domiciliation', 'logger']; 

我認爲在控制器功能中具有數組類型聲明的全部要點是避免havi ng使用$ inject ...我錯過了什麼嗎?

+0

如何縮小你做'mandatsCtrl。$注...'當它是一個匿名的功能呢?你的代碼中有些東西沒有顯示給我們。 – Martin

+1

你沒有錯過代碼縮小的任何東西,你必須使用以下兩種方法中的任何一種 –

+0

@Martin,呃..好點。我的代碼中沒有什麼比我在這裏展示的更多。我猜JavaScript不關心該函數不存在,因爲它是在角度上運行時創建的(我想這麼說...) – Sam

回答

7

如果您要縮小控制器的JavaScript代碼,它的所有函數參數也會被縮小,並且依賴注入器將無法正確識別服務。 有兩種方法來處理的角度

1)Just assign an array with service identifier strings into the $inject property of the controller function 
mandatsCtrl.$inject = ['$scope', 'Domiciliation', 'logger']; 

2) Using bracketnotation 
var mandatsCtrl= ['$scope', 'Domiciliation','logger' function($scope, $Domiciliation,logger) { /* constructor body */ }]; 

http://docs.angularjs.org/tutorial/step_05

+0

這就是採購訂單的做法(方法2)。在重申相同的方法時,這是如何解決採購訂單問題的解決方案? – tamakisquare

+0

我想解釋一下,提到的代碼不是問題,它只是如何角度工作在案件代碼被縮小 –

+0

@Ajay,謝謝澄清,雖然我完全意識到所有這一切:)我的觀點是,我確實使用括號表示法,但我仍然必須使用$ inject屬性,否則我會收到錯誤。 – Sam