例如這樣
app.controller('myCtrl', function($scope, $rootScope) { // 将$rootScope改成其他名字就不行了。 $scope.names = ["Emil", "Tobias", "Linus"]; $rootScope.lastname = "Refsnes"; });
angular是怎麼知道我第二個參數需要$rootScope?
温故而知新,可以为师矣。 博客:www.ouyangke.com
因為 AngularJS 提供兩種注入方式。一種叫 implicit dependency injection(隱式依賴注入),一種叫 explicit dependency injection(明確依賴注入)。
你的程式碼中,使用的是第一種,隱式依賴注入:
app.controller('myCtrl', function($scope, $rootScope) { $scope.names = ["Emil", "Tobias", "Linus"]; $rootScope.lastname = "Refsnes"; });
由於 $scope 和 $rootScope 都是 AngularJS 的 built-in service,因此 AngularJS 可以找到你想要注入的東西。但如果你改成 rootScope,這樣 AngularJS 就從自己的框架中找不到了。
$scope
$rootScope
rootScope
如果使用明確依賴注入,就是這樣:
app.controller('myCtrl', ['$scope', '$rootScope', function(whatever, blah) { whatever.names = ["Emil", "Tobias", "Linus"]; blah.lastname = "Refsnes"; }]);
這樣 AngularJS 就會根據明確聲明的 $scope 和 $rootScope 去找。那你在匿名函數的參數裡,設定成什麼都沒關係。注意先後順序就好。
或者,你也可以透過手動呼叫 $inject 來實現。就像這樣:
$inject
var myController = function($scope, $rootScope) { $scope.names = ["Emil", "Tobias", "Linus"]; $rootScope.lastname = "Refsnes"; }); myConroller.$inject = ['$scope', '$rootScope']; app.controller('myCtrl', myController);
詳情請參考文件:https://docs.angularjs.org/gu...Dependency Annotation 那一部分。
文件中同樣提醒了你,如果你打算壓縮程式碼,那就不要使用隱式依賴注入。
因為 AngularJS 提供兩種注入方式。一種叫 implicit dependency injection(隱式依賴注入),一種叫 explicit dependency injection(明確依賴注入)。
你的程式碼中,使用的是第一種,隱式依賴注入:
由於
$scope
和$rootScope
都是 AngularJS 的 built-in service,因此 AngularJS 可以找到你想要注入的東西。但如果你改成rootScope
,這樣 AngularJS 就從自己的框架中找不到了。如果使用明確依賴注入,就是這樣:
這樣 AngularJS 就會根據明確聲明的
$scope
和$rootScope
去找。那你在匿名函數的參數裡,設定成什麼都沒關係。注意先後順序就好。或者,你也可以透過手動呼叫
$inject
來實現。就像這樣:詳情請參考文件:https://docs.angularjs.org/gu...
Dependency Annotation 那一部分。
文件中同樣提醒了你,如果你打算壓縮程式碼,那就不要使用隱式依賴注入。