84669 人學習
152542 人學習
20005 人學習
5487 人學習
7821 人學習
359900 人學習
3350 人學習
180660 人學習
48569 人學習
18603 人學習
40936 人學習
1549 人學習
1183 人學習
32909 人學習
例如這樣
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 那一部分。
文件中同樣提醒了你,如果你打算壓縮程式碼,那就不要使用隱式依賴注入。