【问题标题】:Angularjs dependency injection, array, $inject, factoryAngularjs 依赖注入、数组、$inject、工厂
【发布时间】:2015-01-21 14:00:36
【问题描述】:

我是一个大的 angularJS 新手,我想要一些关于依赖注入的亮点。

我做了一些研究,这是我目前所了解的。

我有 2 个服务文件(使用工厂):

-mogService.js

angular.module('anglober.services').factory('mogService', ['$http', function($http) {

var mogService = {};

//mogService code here

return mogService;
}]);

-modalService.js

angular.module('anglober.services').factory('modalService', ['$modal',
function ($modal) {

   //modalService code here

}]);

一个控制器文件:

-mogCtrl.js

angular.module('anglober.controllers').controller('mogCtrl', ['$scope', 'mogService','modalService', function ($scope, mogService, modalService) {

//code using mogService and modalService parameters

}]);

据我了解,依赖注入是通过在我的控制器声明中将我的服务作为函数参数的参数传递来完成的,字符串数组在这里,因此在缩小之后,angular 仍然知道哪个变量是什么。

但是,当我测试我的代码时,modalService 变量是未定义的。不过,mogService 可以正常识别(仅当我删除对 modalService 变量的任何调用时)。

我做错了什么? 我已经阅读了有关使用 $inject 的内容,这是更好的做法,为什么?

我在 app.js 中声明模块如下:

angular.module('anglober.services', ['ui.bootstrap']);
angular.module('anglober.controllers', []);

var app = angular.module('anglober', ['anglober.controllers', 'anglober.services',  'anglober.directives']);

这是一个好习惯吗?在一个文件中声明模块及其各自的依赖项然后只使用“getter”而不在模块文件中使用依赖项数组参数?

感谢您的宝贵时间。

【问题讨论】:

  • 控制台有错误吗? $modal 服务来自哪里?什么模块。如果它是 modalService 的依赖项,那么您也需要将其添加到依赖模块中。
  • 控制台抛出:无法读取未定义的属性“showModal”(我调用 modalService.showModal)。 $modal 来自 ui.bootstrap 模块。
  • 模块最好由功能而不是代码类型来定义。这样一来,它们就可以更方便地移植到其他项目中
  • 是的,对于大型项目来说,这似乎是组织模块的最佳方式。我的项目还很小,但这绝对是我的下一步。感谢您的意见。

标签: angularjs dependencies declaration factory code-injection


【解决方案1】:

对我有用的三个步骤 (plunkr):

1.确保只定义一次模块的依赖项。

确实,检查angular.module('anglober.services', [...]); 确实只使用第二个参数调用了一次。

同时,请务必在实际的服务/控制器/...定义之前调用这些行。

2。连接每个依赖项

您应该将'anglober.services' 依赖添加到'anglober.controllers':最后一个需要modalService,后者需要$modal,无论如何它可能会有所帮助。

3。以正确的顺序添加可能缺少的库要求

首先是 jQuery,然后是 angular、bootstrap,最后是 bootstrap.ui 和您的模块。

【讨论】:

  • 谢谢大佬,你的plunker帮我解决了这个问题。我用你的替换了我的 modalService 代码并且它有效,所以问题实际上是服务本身,而不是注入。
猜你喜欢
  • 1970-01-01
  • 2012-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多