Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/413.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 角度服务注入_Javascript_Angularjs - Fatal编程技术网

Javascript 角度服务注入

Javascript 角度服务注入,javascript,angularjs,Javascript,Angularjs,我正在做一项琐碎的任务(我已经完成了),它将一个.active类添加到选项卡导航中的dom元素中。简单。通过以下方式使其工作正常 通过阅读提供的答案,并将他们的控制器与angular网站上的示例控制器进行比较,我发现了一些有趣的东西,我不太明白 在AngularJS网站上,$scope和$location(以及其他服务)与定义控制器的匿名函数一起注入控制器。但答案是,服务不是注入的,而是通过匿名函数传递的。为什么这样做有效?服务不应该总是被注入吗 举个例子:这是为什么 angular.modul

我正在做一项琐碎的任务(我已经完成了),它将一个
.active
类添加到选项卡导航中的dom元素中。简单。通过以下方式使其工作正常

通过阅读提供的答案,并将他们的控制器与angular网站上的示例控制器进行比较,我发现了一些有趣的东西,我不太明白

在AngularJS网站上,
$scope
$location
(以及其他服务)与定义控制器的匿名函数一起注入控制器。但答案是,服务不是注入的,而是通过匿名函数传递的。为什么这样做有效?服务不应该总是被注入吗

举个例子:这是为什么

angular.module('controllers', [])
    .controller('NavigationController', ['$scope', '$location', function($scope, $location) { 
        $scope.isActive = function(route) {
            return route === $location.path();
        };
    }])
angular.module('controllers', [])
    .controller('NavigationController', function($scope, $location) { 
        $scope.isActive = function(route) {
            return route === $location.path();
        };
    })
而这

angular.module('controllers', [])
    .controller('NavigationController', ['$scope', '$location', function($scope, $location) { 
        $scope.isActive = function(route) {
            return route === $location.path();
        };
    }])
angular.module('controllers', [])
    .controller('NavigationController', function($scope, $location) { 
        $scope.isActive = function(route) {
            return route === $location.path();
        };
    })
两者都有效?


这可能很琐碎,但它让我的大脑陷入了一个我无法理解的循环。

事实上,在这两种情况下,它们都是被注射的,这两种情况之间的区别在于,在第一种情况下,您定义并命名了依赖关系。如果您缩小js代码,这可能会很有用,这样您就可以显式声明依赖关系,例如:

angular.module('controllers', [])
    .controller('NavigationController', ['$scope', '$location', function($s, $l) { 
        $s.isActive = function(route) {
            return route === $l.path();
        };
    }])
这样,angular就可以知道在哪个参数上注入哪个依赖项,而无需查看每个参数的命名

另一种情况是,您需要显式地声明将通过设置名称来注入哪个依赖项


我希望这会有所帮助。

这两个示例是等效的-它们只是使用了不同的语法。第一个示例使用了他们所谓的“内联数组注释”(请参阅)。这种替代语法的目的只是为了方便地使注入的变量名不同于依赖项的名称

例如,如果希望变量名为“s”和“l”,则可以编写:

angular.module('controllers', [])
    .controller('NavigationController', ['$scope', '$location', function(s, l) { 
        s.isActive = function(route) {
            return route === l.path();
        };
    }]);

这就是angular处理代码缩小的方式。通过保持字符串的完整性,可以在重命名变量时保持映射变量。 如果你看一下控制器的代码 您将看到构造函数可以同时接受函数和数组

可能对你有用。