角度$范围为什么不能改变?

时间:2014-05-31 09:57:20

标签: javascript angularjs

我决定看看Angularjs。在教程的第一步后,我尝试重命名$scope变量。但它打破了所有的事情。

phonecatApp.controller('PhoneListCtrl', function($scope) { ... }); // this works

phonecatApp.controller('PhoneListCtrl', function(foo) { ... }); // this does not works

为什么呢?它不仅仅是传递给回调的局部变量吗?为什么必须有特定的名称?

2 个答案:

答案 0 :(得分:2)

注入变量。这意味着Angular实际上会从它的名称中推断出它的价值。这就是" $ scope"会工作的。

这适用于控制器,服务等的任何参数。例如,如果你定义自己的服务,你也会注入它:

// You will not get instance of your service directly. Instead, just
// put it right into function parameter list, and it will get injected
// by Angular for you.
phonecatApp.controller('PhoneListCtrl', function ($scope, SomeService) {
});

// Declaration of your custom service.
phonecatApp.factory('SomeService', function() {
});

您将在this article中的Angular中找到有关DI(依赖注入)的更多内容。

答案 1 :(得分:0)

你可以这样做:

phonecatApp.controller('PhoneListCtrl', ['$scope', function(foo) { ... }]); 

这是有效的,并且是一种很好的做法(使用['' ...]不要将$ scope重命名为foo :-))如果你以后想要缩小你的js文件。