Angular在服务中创建新范围

Vit*_*aly 5 javascript angularjs

我有一个使用ngDialog的服务(这是该服务的唯一目的 - 显示常见的对话框:警报,确认等).ngDialog要求将范围对象作为参数传递给插值对话框的模板.所以我需要创建一个范围,分配它的属性并传递给ngDialog.open.问题是我无法将$ rootScope(或$ scope)注入服务和范围.$ new是我找到创建空范围的唯一方法.当我像这样注入$ rootScope

    myService.$inject = ['$rootScope', 'ngDialog'];
Run Code Online (Sandbox Code Playgroud)

我收到错误:未知的提供程序:$ rootScope Provider < - $ rootScope < - myService但是,如果我只使用快捷方式合并来判断依赖关系,这是有效的:

function myService($ rootScope,ngDialog){

// $ rootScope这里是可访问的

}

但这种方法不是缩小安全的.所以问题是:如何在服务中创建新范围?

更新 这里是jsfiddle,显示了我在项目中的结构.从指令调用服务时发生错误,现在问题消失了. 的jsfiddle

mad*_*und 1

尽管您注入了$rootScope,但ngDialog您仍然需要在服务中指定它们。

var myservice= function($rootScope, ngDialog) {
  // ...
}

myservice.$inject = ['$rootScope', 'ngDialog'];
someModule.service('myservice', myservice);
Run Code Online (Sandbox Code Playgroud)

更新:这段代码完美运行

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);
Run Code Online (Sandbox Code Playgroud)

这是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);
Run Code Online (Sandbox Code Playgroud)