为什么变量名是"$scope"必要的
Why is the variable name "$scope" necessary ?
我对Javascript相当陌生(刚刚读完《雄辩的Javascript》一书),目前正在阅读O'Reilly的AngularJS。从书中获取这一小段代码让我疯狂了几个小时,让我陷入了兔子洞,认为我在设置环境的某个地方搞砸了。AngularJS书中提供的代码和我输入的代码的唯一区别是,我在TextController函数的"$scope"中省略了"$"。把"$"放回去,代码就可以工作了。
这是我最初省略它的原因:哦,'$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>
这是由Angular的注入器处理的。
http://docs.angularjs.org/api/auto/service/美元注入器
http://docs.angularjs.org/guide/di在JavaScript中对函数调用toString()将返回函数定义。然后可以解析定义并提取函数参数。注意:这不适用于缩小和混淆工具,因为这些工具会更改参数名称。
给定一个函数,注入器可以通过检查函数声明并提取参数名来推断要注入的服务的名称。在上面的例子中,$scope和greeter是需要注入到函数中的两个服务。
前面两个答案都是正确的,只是你应该知道,如果你以这种方式声明一个控制器,你可以"覆盖"默认行为:
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>
在这里工作:http://jsfiddle.net/d4M2P/
因为Angular在构建控制器的依赖注入系统中使用了该参数的名称。
相关文章:
- AngularJS:ng之后,重复$scope值未按预期更新
- 铬:“;未捕获的语法错误:意外的标记:"
- 可以设置“;文件名"发生错误时显示的内联脚本标记的
- JS表单提交"无法使用Chrome数据保护程序加载此页面.尝试重新加载页面.调试信息:POST CISmtuK
- 检测电话窃听,即:<a href="电话:xxx">在UIWebview上
- $ionicplatform内的$scope不;不起作用
- 使用“+="操作人员
- //而不是在src=“”上使用http://"属性
- 使用$scope方法时的ControllerAs语法
- "未捕获的语法错误:意外的标记}"
- 可以<脚本类型=“;text/javascript”>window.location=“/"</
- "实例范围”;TypeScript类的getter/setter
- Javascript复选框函数:;缺少:在属性id之后"
- "“;变量未引用正确的对象
- 如何将ngrepeat下的ngmodel绑定到$scope
- 另一个if(!$scope.$$phase)$scope$apply()szenario-需要帮助才能通关
- "日期“;AJAX请求返回的类型值未定义
- Angular为什么说“;未捕获的ReferenceError:$scope未定义"
- 将$scope.model子级初始化为“”"或为空
- "scope.watch不是一个函数“;Angular.js中的错误