在 Angular 中,这里是使用 $http 的简单示例。
var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope, $http) {
$http.get("welcome.htm")
.then(function(response) {
$scope.myWelcome = response.data;
});
});
我不明白的是,$http 是回调函数中参数的名称,所以如果将其重命名为其他名称,为什么会有所不同?
例如在 JavaScript 中这两个显然是完全相同的函数
function(a, b) {
return a+b;
}
function(c, d) {
return c+d;
}
但在这种情况下,如果我将 $http 替换为其他任何内容(例如 $HTTP),它会中断吗?
var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope, $HTTP) {
$HTTP.get("welcome.htm")
.then(function(response) {
$scope.myWelcome = response.data;
});
});
最佳答案
您当然可以使用其他名称,在特定情况下您应该!方法如下:
angular.module('myApp', [])
.controller('myCtrl', ["$scope", "$http", function(thescope, thebackend) {
thebackend.get("welcome.htm")
.then(function(response) {
thescope.myWelcome = response.data;
});
}]);
此处 controller(...)
的第二个参数是一个具有特定结构的数组。
- 为了一个字符串列表,其中包含您希望 Angular 注入(inject)的服务名称;
- 最后,最后一项是您的 Controller 构造函数,它采用参数来填充您在数组中早些时候请求的服务。
使用这种结构,您可以随意命名参数。
优点:您现在可以缩小此代码。缩小会将字符串单独留在数组中,从而留下正确的服务名称供 Angular 识别。参数将被安全地缩小,因为它们可以是任何东西。
您的版本没有这样的数组,将使用参数名称来查找适当的服务。如果你以不同的方式命名这些参数,Angular 将无法知道将什么服务注入(inject)到该参数中。
对于快速演示和临时应用程序,您的版本工作正常。这就是您经常看到它的原因,尤其是在文档或 SO 答案和问题中。对于生产应用,我建议始终使用缩小安全版本。
The other answer by @slugonamission也有一些很好的信息,包括指向 the appropriate documentation article on Dependency Injection 的链接.
附言。是的,你的第二个例子会失败,你可以很容易地尝试。 Angular 无法知道 $HTTP
是什么,因为它只知道 $http
。
关于javascript - 为什么不能在 Angular 中更改参数名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38086021/