Angular在服务

时间:2015-09-06 12:02:20

标签: javascript angularjs

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

    myService.$inject = ['$rootScope', 'ngDialog'];

我收到错误:未知提供商:$ rootScope Provider< - $ rootScope< - myService 但是,如果我只是使用快捷方式来修复依赖关系,那么这是有效的:

  

function myService($ rootScope,ngDialog){

     

// $ rootScope可以访问

     

}

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

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

1 个答案:

答案 0 :(得分:1)

虽然您注入了$rootScopengDialog,但仍需要在服务中指定它们。

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);