javascript - angularjs怎么知道回调函数里需要什么参数?
问题描述
例如这样
app.controller(’myCtrl’, function($scope, $rootScope) { // 将$rootScope改成其他名字就不行了。 $scope.names = ['Emil', 'Tobias', 'Linus']; $rootScope.lastname = 'Refsnes';});
angular是怎么知道我第二个参数需要$rootScope?
问题解答
回答1:因为 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 就从自己的框架中找不到了。
如果使用显式依赖注入,就是这样:
app.controller(’myCtrl’, [’$scope’, ’$rootScope’, function(whatever, blah) { whatever.names = ['Emil', 'Tobias', 'Linus']; blah.lastname = 'Refsnes';}]);
这样 AngularJS 就会根据显式声明的 $scope 和 $rootScope 去找。那么你在匿名函数的参数里,设置成什么都没关系。注意先后顺序就好。
或者,你也可以通过手动调用 $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 那一部分。
文档中同样提醒了你,如果你打算压缩代码,那就不要使用隐式依赖注入。
相关文章:
1. dockerfile - 为什么docker容器启动不了?2. javascript - webapp业务流程基本一致,多套主题(样式基本不一样,交互稍有偏差)管理,并且有不断有新增主题,该如何设计组件化架构?3. javascript - ejs支持if else语法吗4. 请教各位大佬,浏览器点 提交实例为什么没有反应5. macos - mac下docker如何设置代理6. javascript - 用rem写的页面,安卓手机显示文字是正常的,苹果显示的文字是特别小的是为什么呢7. javascript - 移动端,当出现遮罩层的时候,遮罩层里有div是超出高度scroll的,怎么避免滑动div的时候,body跟随滑动?8. javascript - JS设置Video视频对象的currentTime时出现了问题,IE,Edge,火狐,都可以设置,反而chrom却...9. 新手 - Python 爬虫 问题 求助10. javascript - 学习网页开发,关于head区域一段脚本的疑惑
