javascript - angularjs怎么知道回调函数里需要什么参数?

查看:92
本文介绍了javascript - angularjs怎么知道回调函数里需要什么参数?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

例如这样

app.controller('myCtrl', function($scope, $rootScope) {
    // 将$rootScope改成其他名字就不行了。
    $scope.names = ["Emil", "Tobias", "Linus"];
    $rootScope.lastname = "Refsnes";
});

angular是怎么知道我第二个参数需要$rootScope?

解决方案

因为 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 那一部分。

文档中同样提醒了你,如果你打算压缩代码,那就不要使用隐式依赖注入。

这篇关于javascript - angularjs怎么知道回调函数里需要什么参数?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆