将函数和数组作为AngularJS控制器传递有什么区别?

时间:2013-09-19 10:42:36

标签: angularjs angularjs-controller

这两项工作都有效,但每次实施之间的实际差异是什么?我确信每种方法背后都有逻辑推理,我希望能够开悟。

angular.module('app').controller('GeneralCtrl', 
    function($scope, $location, exampleService) {
        $scope.variable = exampleService.getExampleVariable();
    }        
);

angular.module('app').controller('GeneralCtrl', 
    ['$scope', '$location', 'exampleService', function($scope, $location, exampleService) {
        $scope.variable = exampleService.getExampleVariable();
    }]
);

这些之间的实际差异是什么?你会用不同的方式使用它们?为什么呢?

答案:当minifiers重命名参数名称时,后者是minification安全的,因此无法从名称中推断出依赖关系,因此必须进行注释。

1 个答案:

答案 0 :(得分:4)

Angular称之为依赖注入的“内联符号”(详见http://docs.angularjs.org/guide/di)。

在您给出的示例中,ng-controller指令实际上是在幕后工作,将$scope$locationexampleService连接到变量中'首先提供function。默认情况下,它基于变量名称执行此操作(即,它假定名为$scope的变量要求$scope依赖项。)

也就是说,当您缩小代码时,变量名称也会被删除(即$scope可能变为a)。当发生这种情况时,Angular现在不再知道变量的意思了。

一个选项是添加

GeneralCtl.$inject('$scope', '$location', 'exampleService')

另一种方法是像第二个例子中那样提供这些字符串。这样可以确保即使变量名称被更改,也可以告诉Angular他们假设代表什么,并且它知道如何正确设置它们。