我有点困惑。必须将一些依赖项注入主模块。例如:
angular.module("app", ["ui.router", "ui.bootstrap", "toaster"]);而其他一些依赖项可以直接注入控制器,但不需要注入主模块。例如:
angular.module("app").controller("newCtrl", ["$q", newCtrl);我很难理解原因。任何帮助都将不胜感激。
发布于 2016-01-28 19:55:58
$q是核心ng模块中的一个服务,根据文档。
在加载和解析angular.js文件时,将引导和注册ng模块中的所有服务。这让你可以在你的应用程序中的任何地方注入它们。
但是,上面列出的三个示例都是外部的模块依赖关系。它们需要显式地注册到您的应用程序中,以便当$injector服务试图解决这些组件时,这些组件是可用的。
发布于 2016-01-28 20:00:51
将模块注入到其他模块中。
将这些模块中包含的提供者、服务和工厂注入到特定控制器中。
发布于 2016-01-28 20:15:16
在角度上,您定义了如下模块:
angular.module('MyModule1', []);注意模块函数是如何接受两个参数的。第二个参数是该模块所依赖的其他模块的数组。此构造用于设置模块。
一旦定义了模块,您就可以将控制器、服务等附加到模块上。
angular
.module('MyModule1')
.service('MyService1');注意,这一次只给了模块函数一个参数。这意味着你得到一个已经注册的模块。
假设您创建了另一个模块MyModule2,但是MyModule2需要使用MyModule1定义的服务。
您只需将模块MyModule2设置为MyModule1作为其依赖项。
angular.module('MyModule2', ['MyModule1']);现在,您希望在MyModule2中创建一个控制器(或指令或服务,任何东西),该控制器实际上使用了在MyModule1中定义的服务MyService1。
这就是角度依赖注入(DI)出现的原因。使用服务名称定义控制器作为函数参数,当角实例化控制器时,它确保找到服务实例并提供给控制器。
angular
.module('MyModule2')
.controller('MyController2', function (myService1) {
// Hey I can use myService1
// Dependency Injection FTW!
});https://stackoverflow.com/questions/35070751
复制相似问题