5

这两种方法都有效,但每种实现之间的实际区别是什么?我确信每种方法背后都有逻辑推理,我希望得到启发。

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();
    }]
);

这些之间的实际区别是什么?你会在哪里以不同的方式使用它们?为什么?

答案:事实证明后者是缩小安全的,因为缩小器重命名参数名称,因此无法从它们的名称推断依赖关系,因此必须进行注释。

4

1 回答 1

4

这就是 Angular 所称的依赖注入的“内联表示法”(有关详细信息,请参阅http://docs.angularjs.org/guide/di)。

在您给出的示例中,该ng-controller指令实际上是在幕后完成工作,将 , 连接$scope$locationexampleService提供给 first 的变量中function。默认情况下,它基于变量名称执行此操作(也就是说,它假定调用的变量$scope正在请求$scope依赖项)。

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

一种选择是添加

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

另一种方法是像在第二个示例中那样提供这些字符串。这可以确保即使变量名称发生变化,您也可以告诉 Angular 它们应该代表什么,并且它知道如何正确设置它们。

于 2013-09-21T00:45:29.290 回答