我对Javascript很新(刚刚完成了Eloquent Javascript这本书),目前正在阅读O' Reilly的AngularJS。从书中获取这些小代码片段让我疯了几个小时,让我陷入了兔子洞,以为我在设置环境时搞砸了。 AngularJS书中提供的代码与我输入的代码的唯一区别在于我遗漏了' $' in" $ scope"在TextController函数中。把'' $'回来允许代码工作。
这是我最初抛弃它的原因: 哦,' $ scope'只是函数本地的变量名。像任何其他编程语言(如Java或C ++)一样,因为这个参数只是一个局部变量,我可以将它命名为我想要的任何名称,因为传递给函数的任何参数都将通过值传递。
请更正我的推理并解释为什么参数的名称必须为" $ scope"。
<!doctype html>
<html ng-app>
<body ng-controller="TextController">
<p>{{someText}}</p>
<script src="angular.min.js"></script>
<script>
function TextController($scope) {
$scope.someText = 'You have started your journey.';
}
</script>
</body>
</html>
答案 0 :(得分:6)
这由Angular进样器处理。
http://docs.angularjs.org/api/auto/service/ $注射器
在JavaScript中调用函数上的toString()会返回函数定义。然后可以解析定义并提取函数参数。注意:这不适用于缩小和混淆工具,因为这些工具会更改参数名称。
http://docs.angularjs.org/guide/di
给定一个函数,注入器可以通过检查函数声明和提取参数名称来推断要注入的服务的名称。在上面的示例中,$ scope和greeter是两个需要注入函数的服务。
答案 1 :(得分:6)
以前的答案都是正确的,只是你应该知道你可以&#34;覆盖&#34;如果您以这种方式声明控制器,则为默认行为:
module.controller("ControllerName",["$scope",function( custom_name ){ ... }]);
示例:
var app = angular.module("myApp",[]);
app.controller("TextController",["$scope",function(glue){
glue.name1 = "John";
glue.name2 = "Paul";
glue.name3 = "George";
glue.name4 = "Ringo";
}]);
然后:
<div ng-controller="TextController">
Hello {{ name1 }}, {{ name2 }}, {{ name3 }}, {{ name4 }}!
</div>
答案 2 :(得分:1)
因为Angular在其dependency injection系统中使用参数的名称,该系统构造控制器。