假设我有一个服务MyService,它具有属性“data”,其中包含从2或3 $ http请求中检索的内容,并将其存储到“data”中。这个“数据”需要可访问或传递给要处理的指令(如模态)。
服务“MyService”包含myDirective在首次加载时需要处理的属性“data”。
// var app = angular.module...
app.service('MyService',...)
我有一个单独的指令“myDirective”:
var myDirective = angular.module('myDirective', []);
myDirective.directive('control', ['Params', function(Params) {...
我尝试通过执行以下操作注入“MyService”:
var myDirective = angular.module('myDirective', ['MyService']);
myDirective.directive('control', ['Params', function(Params) {...
虽然未能实例化说:
error: [$injector:nomod] Module 'MyService' is not available! You either misspelled the module name or forgot to load it.
If registering a module ensure that you specify the dependencies as the second argument.
如何从myService正确实例化myDirective?这是正确的方法还是应该使用某些控制器/工厂/提供商?
答案 0 :(得分:1)
您将myService
视为不是的模块,它是模块的组件。您只将模块注入其他模块。将所有相关模块注入主模块后,所有模块的组件都可直接用于其他组件,无论它们最初注册到哪个模块。
要注入指令,就像将Params
注入指令一样。我怀疑你只是为了创建一个指令而不必要地创建一个新模块。
尝试这种方式:
app.service('MyService',...);
app.directive('control', ['Params','MySerrvice', function(Params,MyService) {...
现在,在指令中,您可以使用MyService.propertyName
答案 1 :(得分:0)
您正在尝试将MyService
服务作为模块添加到您的MyDirective
模块中,该模块无效。
简单的方法是将指令添加到您的app模块并注入您的服务:
app.directive('control', ['Params', 'MyService', function(Params, MyService) {
//...
}]);
如果您为指令创建额外的模块,也可能为您的服务创建额外的模块,您必须将这些模块添加到您的应用程序模块中(例如,通常在app.js中):
var directivesModule = angular.module('app.directives', []);
var servicesModule = angular.module('app.services', []);
var app = angular.module('app', ['app.directives', 'app.services']);
然后将您的服务和指令添加到相应的模块中:
servicesModule.service('MyService',...);
directivesModule.directive('control', ['Params','MyService', function(Params, MyService) {
//...
}]);
为每个服务/指令创建一个文件,或为所有服务创建一个文件,为所有指令创建一个文件。取决于您的应用程序的大小。