2013-11-20 258 views
0

請看下面,這兩個樣本依賴注入基本上等於他們在做什麼,或者我錯過了我生命中重要的東西?AngularJS依賴注入植入方法

代碼示例#1

angular.module("app", []); 
function Controller($scope, SomeService) { 
    // do stuff 
} 

Controller.$inject = ['$scope', 'SomeService'];  

代碼示例#2

angular.module("app", []) 
.controller("Controller", [ '$scope', 'SomeService' function($scope, SomeService){ 
    // do stuff 
}]); 
+0

@musically_ut - 感謝 - 這是一個錯字 – Iladarsda

回答

1

這兩個代碼段是不一樣的。

angular.module("app", []); 
function Controller($scope, SomeService) { 
    // do stuff 
} 

Controller.$inject = ['$scope', 'SomeService'];  

儘管它宣稱的app模塊存在不加控制到模塊空間(namespace)app。另外,我不認爲這個代碼會運行。請參閱下文了解如何使用這種注射方式。

angular.module("app", []) 
.controller("Controller", [ '$scope', 'Service' function($scope, SomeService){ 
    // do stuff 
}]); 

第二種形式使用速記.controller()方法來創建所述控制器和注入的資源。然後您可以將angular.module('app')拉到指定控制器的引用。

手動注入到控制器中遵循這個風格:

angular.module('app', []) 
    .factory('someService', function($window) { 
    return { 
     serve: function(text) { 
     $window.alert(text); 
     } 
    }; 
    }); 

var injector = angular.injector(['app', 'ng']); 

function Controller($scope, someService) { 
    $scope.doStuff = function() { 
    someService.serve('Doing stuff'); 
    }; 
} 

injector.instantiate(Controller); 

對於一個完整的示例,請參閱:http://docs.angularjs.org/guide/di

+0

好一點,但我的問題是關於控制器$注入&依賴注入 – Iladarsda

+1

哦,那麼它們是一樣的。兩者都可以避免縮小錯誤。 –

+0

我正在看這個更近一點。我不使用第一種語法,我想確保它是正確的 –