关于这个AngularJS代码片段,我不理解什么基本概念?

关于这个AngularJS代码片段,我不理解什么基本概念?,angularjs,Angularjs,我一直在阅读教程、开发指南,并自己进行练习,但我很难将依赖注入方面的所有内容拼凑在一起 问题:在下面链接页面的第一个代码段中,为什么“服务”的名称位于$inject前面,为什么这里再次使用服务的参数?或者更好的是,我对什么概念缺乏理解?我希望能够在脑海中一步一步地把它们拼凑在一起,但我仍在努力理解,即使是全球定义的“服务/功能”是如何以这种方式编写的 看起来您对AngularJS中的依赖注入缺乏深入的理解 一旦定义了服务,就需要将其注入到将要使用它的控制器中。该页面上的两个代码示例显示了将服务注

我一直在阅读教程、开发指南,并自己进行练习,但我很难将依赖注入方面的所有内容拼凑在一起

问题:在下面链接页面的第一个代码段中,为什么“服务”的名称位于$inject前面,为什么这里再次使用服务的参数?或者更好的是,我对什么概念缺乏理解?我希望能够在脑海中一步一步地把它们拼凑在一起,但我仍在努力理解,即使是全球定义的“服务/功能”是如何以这种方式编写的


看起来您对AngularJS中的依赖注入缺乏深入的理解

一旦定义了服务,就需要将其注入到将要使用它的控制器中。该页面上的两个代码示例显示了将服务注入控制器的两种不同方法


我建议您查看文档:

因此,在该代码片段中,将$location服务注入MyController。所以MyController依赖于$location,所以它声明依赖项,并且它拥有依赖项声明

以下是注释的代码:

// declaring a Controller function
var MyController = function($location) { ... };

// $location service is required by MyController
MyController.$inject = ['$location'];

// Then register the Controller in the module.
// The module is the container that performs DI on the objects within it.
myModule.controller('MyController', MyController); 
通常情况下,您会执行以下操作来一次性声明控制器及其依赖项,这样会更干净。依赖项是位于数组前面的字符串,位于最终函数(正在注册的控制器)之前。以下是更简单的定义:

myModule.controller('MyController', ['$scope', '$location', function($scope, $location) {
    $scope.someFunction = function() {
        // do something with $location service in here
    };
}]);
请记住:

“…即使是全球定义的“服务/功能”


DI的全部要点是不全局定义事物,因为全局定义会产生耦合,使得系统的主要部分很难重用(即,如果不实例化整个事物,就无法分解系统)。依赖项注入分离依赖项(即MyController依赖/使用$location服务)从哪里可以找到引用。初学者开发人员和一些高级开发人员坦率地说,通常只是全局地定义事物,这就是所有事物获取对其依赖项引用的方式。DI允许代码简单地声明其依赖项,以便其依赖项可以由外部实体(而不是代码助理)提供给代码ng从何处获取。这通常被称为好莱坞原则-不要打电话给我们,我们会打电话给你。

有时文件太正式,或者在“搅拌”时厨房里有太多厨师。非常感谢。这很有帮助,你甚至给了我更多的思考。