首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >AngularJS:向主模块或控制器注入依赖项?

AngularJS:向主模块或控制器注入依赖项?
EN

Stack Overflow用户
提问于 2016-01-28 19:52:51
回答 3查看 1.1K关注 0票数 2

我有点困惑。必须将一些依赖项注入主模块。例如:

代码语言:javascript
复制
angular.module("app", ["ui.router", "ui.bootstrap", "toaster"]);

而其他一些依赖项可以直接注入控制器,但不需要注入主模块。例如:

代码语言:javascript
复制
angular.module("app").controller("newCtrl", ["$q", newCtrl);

我很难理解原因。任何帮助都将不胜感激。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-01-28 19:55:58

$q是核心ng模块中的一个服务,根据文档

在加载和解析angular.js文件时,将引导和注册ng模块中的所有服务。这让你可以在你的应用程序中的任何地方注入它们。

但是,上面列出的三个示例都是外部的模块依赖关系。它们需要显式地注册到您的应用程序中,以便当$injector服务试图解决这些组件时,这些组件是可用的。

票数 2
EN

Stack Overflow用户

发布于 2016-01-28 20:00:51

将模块注入到其他模块中。

将这些模块中包含的提供者、服务和工厂注入到特定控制器中。

票数 2
EN

Stack Overflow用户

发布于 2016-01-28 20:15:16

在角度上,您定义了如下模块:

代码语言:javascript
复制
angular.module('MyModule1', []);

注意模块函数是如何接受两个参数的。第二个参数是该模块所依赖的其他模块的数组。此构造用于设置模块。

一旦定义了模块,您就可以将控制器、服务等附加到模块上。

代码语言:javascript
复制
angular
    .module('MyModule1')
    .service('MyService1');

注意,这一次只给了模块函数一个参数。这意味着你得到一个已经注册的模块。

假设您创建了另一个模块MyModule2,但是MyModule2需要使用MyModule1定义的服务。

您只需将模块MyModule2设置为MyModule1作为其依赖项。

代码语言:javascript
复制
angular.module('MyModule2', ['MyModule1']);

现在,您希望在MyModule2中创建一个控制器(或指令或服务,任何东西),该控制器实际上使用了在MyModule1中定义的服务MyService1。

这就是角度依赖注入(DI)出现的原因。使用服务名称定义控制器作为函数参数,当角实例化控制器时,它确保找到服务实例并提供给控制器。

代码语言:javascript
复制
angular
    .module('MyModule2')
    .controller('MyController2', function (myService1) {
        // Hey I can use myService1
        // Dependency Injection FTW!
    });
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35070751

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档