angular.module("app", ["ui.router", "ui.bootstrap", "toaster"]);
虽然其他一些依赖项可以注入控制器,但不需要注入主模块。例如:
angular.module("app").controller("newCtrl", ["$q", newCtrl);
我很难理解为什么。任何帮助将不胜感激。
答案 0 :(得分:2)
$q
核心ng模块中的服务,符合documentation。
在加载和解析angular.js文件时,ng模块中的所有服务都被引导并注册。这允许您将它们注入应用程序的任何位置。
但是,您上面列出的三个示例都是外部模块化依赖项。需要将它们显式注册到您的应用程序中,以便在$injector
服务尝试解析它们时可以使用其中的组件。
答案 1 :(得分:2)
您将模块注入其他模块。
将这些模块中包含的提供者,服务和工厂注入特定控制器。
答案 2 :(得分:1)
在Angular中,您可以定义一个类似的模块:
angular.module('MyModule1', []);
注意模块函数如何获取两个参数。第二个参数是该模块依赖的其他模块的数组。此构造用于设置模块。
定义模块后,您可以将控制器,服务等连接到模块。
angular
.module('MyModule1')
.service('MyService1');
注意,这次只有一个参数给模块函数。这意味着您正在已经注册的模块。
假设您创建了另一个模块MyModule2,但MyModule2需要使用MyModule1定义的服务。
您只需将模块MyModule2设置为MyModule1作为其依赖项。
angular.module('MyModule2', ['MyModule1']);
现在,您想要在MyModule2中创建一个实际使用MyModule1中定义的服务MyService1的控制器(或指令或服务,无论如何)。
Angular的依赖注入(DI)的位置。您使用服务名称作为函数参数定义控制器,当Angular实例化您的控制器时,它确保找到服务实例并提供给您控制器。
angular
.module('MyModule2')
.controller('MyController2', function (myService1) {
// Hey I can use myService1
// Dependency Injection FTW!
});