【问题标题】:Angular create new scope inside serviceAngular 在服务内创建新范围
【发布时间】:2015-09-06 12:02:19
【问题描述】:

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

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

我收到错误:未知提供者:$rootScope 提供者

function myService($rootScope, ngDialog) {

//这里的$rootScope是可以访问的

}

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

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

【问题讨论】:

  • ngDialog requires scope object to be passed as parameter - 我不认为这是正确的。您是否尝试过不通过范围?
  • 它需要范围来插入模板。如果我不通过范围,对话框将出现,但我无法在没有范围的情况下更改其中的任何内容

标签: javascript angularjs


【解决方案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);

【讨论】:

  • 当然!我的代码和你的一样。这段代码失败了。但是如果注释与 myservice.$inject 一致,它可以工作!
  • 注入scope\rootScope时出现问题。如果我只注入 ngDialog,它也可以工作
  • 感谢 maddygoround,但控制器内部的 $inject 似乎没有多大帮助。它之所以有效,是因为它使用了隐式注释。如果您更改 myservice 中的参数名称,它会中断。这意味着 $inject 不用于 DI,但参数名称是。
  • 请查看更新后的代码。我为你做了一些对你有意义的改变:D
  • 谢谢,maddygoround。你的例子工作正常。不幸的是,我无法弄清楚我得到错误的真正原因是什么,但它现在正在工作,在我从头开始重新创建它之后。我更新了我的第一篇文章以显示我的结构
猜你喜欢
  • 2018-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多