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
尽管您注入了$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)