我有一个使用ngDialog的服务(这是服务的唯一目的 - 显示常见的对话框:警报,确认等)。 ngDialog要求将范围对象作为参数传递给插值对话框的模板。 所以我需要创建一个范围,分配它的属性并传递给ngDialog.open。 问题是我不能将$ rootScope(或$ scope)注入服务和范围。$ new是我找到创建空范围的唯一方法。 当我像这样注入$ rootScope时
myService.$inject = ['$rootScope', 'ngDialog'];
我收到错误:未知提供商:$ rootScope Provider< - $ rootScope< - myService 但是,如果我只是使用快捷方式来修复依赖关系,那么这是有效的:
function myService($ rootScope,ngDialog){
// $ rootScope可以访问
}
但这种方法不是缩小安全的。 所以问题是:如何在服务中创建新范围?
更新 这是jsfiddle,它显示了我在项目中的结构。从指令调用服务时发生错误,现在问题消失了。 jsfiddle
答案 0 :(得分:1)
虽然您注入了$rootScope
和ngDialog
,但仍需要在服务中指定它们。
var myservice= function($rootScope, ngDialog) {
// ...
}
myservice.$inject = ['$rootScope', 'ngDialog'];
someModule.service('myservice', myservice);
更新:此代码完美无缺
var myservice = function($rootScope,ngDialog) {
alert($rootScope);
}
angular.module('myapp',['ngDialog']).controller('datac',function($scope,myservice){
$scope.parties = [];
myservice.$inject = ['$rootScope','ngDialog'];
});
angular.module('myapp').service('myservice', myservice);
以下是plunker链接:http://plnkr.co/edit/FXrE3jNhAYqtv7vVGzgx?p=preview
更新: 好的抱歉我在控制器中注入了服务而只是在控制器外注入rootScope和ngDialog服务
var myservice = function(obscope,obdialog) {
alert(obscope);
}
myservice['$inject'] = ['$rootScope', 'ngDialog'];
angular.module('myapp',['ngDialog']).controller('datac',function($scope,myservice){
$scope.parties = [];
});
angular.module('myapp').service('myservice', myservice);