【发布时间】: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