2014-04-09 28 views
1

我对AngularJS是一种新手。在AngularJS的模块中的Controller中传递范围参数

在关于如何使用AngularJS模块文本我碰到下面的代码

var myApp = angular.module('myApp', []); 

myApp.controller('MainCtrl', ['$scope', function ($scope) { 

    $scope.text = 'Hello, Angular fanatic.'; 

来到我们定义一个模块,这种情况下。我得到的模块是一种避免全局变量的方法,它们在rootcope中定义了一个范围,并充当控制器和其他对象的容器。

在myApp.controller(..)行中,我们传递$ scope对象,并且还使用$ scope对象传递一个函数对象。我不知道为什么需要传递$ scope参数。为什么直接使用$ scope变量而不将它注入控制器是不可能的,我猜是数组中的第一个变量在做什么。

当在ng-controller标签中使用控制器时,我猜想$ scope会自动创建并追加。在这种情况下,通过$ scope不是多余的。

回答

3

不强制传递$范围参数数组中,你可以做如下:

myApp.controller('MainCtrl', function ($scope) { 

//Your code here 

}); 

如果我没有得到你的意思,不是让我知道,我会解释这对你来说更是如此!

1

您实际上没有通过$scope对象作为第一件事,您声明您的代码取决于对角度DI系统的$scope对象。省略它具有相同的结果,但在缩小时它不起作用,这就是为什么数组语法首选缩小。

0

如在AngularJs documentation for controllers中所见,您可以使用更简单的方式在您的应用中设置您的控制器。你的例子也可以这样写:

myApp.controller('MainCtrl', function ($scope) { 

    $scope.text = 'Hello, Angular fanatic.'; 

} 

更多,角度为您提供了possibilty注入大量的事情控制器的参数在你想要的顺序。所以这也可以输入:

myApp.controller('MainCtrl', function (customService1, customService2, $scope) { 

    $scope.text = 'Hello, Angular fanatic.'; 

} 

而$ scope变量将始终设置正确。

声明控制器的“数组”方式用于避免在缩小角度脚本时发生问题,导致缩略词在'a'类中转换'$ scope',那么Angular解析将失败。

所以,你有两种解决方案:

  • 写的“阵”符号的控制器,如果你想与普通minifiers来缩小你的脚本。

  • 与“简单”的符号写你自己的控制器,如果你,如果你使用ng-min或类似的东西(我推荐这种方式),不运行如下脚本
1

我也是AngularJS的新手,但我相信我可以部分回答你的问题。

(1):数组中的第一个变量为函数中的第一个参数分配一个名称。这是缩小所必需的。请参阅“关于缩小的注意事项”:http://docs.angularjs.org/tutorial/step_05

(2):我不是100%确定的,但我猜想函数签名中的$范围是依赖注入的AngularJS方法的一部分。在这种情况下,它使用基于构造函数的依赖注入。

请记住,有树种依赖注入:构造函数注入,设置注入,接口注入。