在服务angularjs中的函数中使用$scope
Using $scope in a function in service angularjs
我知道同样的问题已经被问了很多次,但我找不到符合我要求的确切问题。所以我的问题是:
我的控制器中有一个功能:
showPNG = function() {
var pngPromise = $modal({
template: 'index.html',
persist: true,
show: false,
backdrop: 'static',
scope: $scope,
modalClass: 'preview-png'
});
$q.when(pngPromise).then(
function(pngElement) {
pngElement.modal('show');
}
);
};
我有三个具有相同功能的控制器。因此,我试图以这样一种方式对它进行重构,即它是在某个服务中编写的,并且可以从所有控制器中调用。到目前为止,我所做的是:
服务中:
var service = module.exports = function ($modal, $q) {
return {
showPNG : function(scope) {
var pngPromise = $modal({
template: 'index.html',
persist: true,
show: false,
backdrop: 'static',
scope: scope,
modalClass: 'preview-png'
});
$q.when(pngPromise).then(
function(pngElement) {
pngElement.modal('show');
}
);
}
};
};
service.$inject = ['$modal', '$q'];
在控制器中:
...
myService.showPNG($scope);
...
此代码工作时没有任何错误。但问题是,将$scope
作为参数传递给函数是否为服务会产生任何副作用?有没有更好的替代方法?
谢谢。
我建议不要将$scope传递给服务。这使您的服务依赖于使用它的控制器。如果需要另一个控制器使用该服务怎么办?
相反,让服务返回一个承诺,并在控制器中执行以下操作:
.controller("ctrl1", ["$scope", "service", function($scope, service){
$scope.showModal = false;
service.showPNG()
.then(function(shouldShow){
$scope.showModal = shouldShow;
$scope.$apply(); // assuming showPNG is async
});
}]);
编辑:下面是一个如何实现模式对话框服务的示例:http://weblogs.asp.net/dwahlin/building-an-angularjs-modal-service
相关文章:
- 从服务返回值时$scope控制器的变量是未定义的
- 将服务中的函数绑定到$scope(错误:无法设置undefined的属性'onChange')
- 如何访问ng-init或ng-checked中服务回调函数中声明的$scope变量
- 角度$scope首先设置值而不是服务,然后第二个函数调用一切正常
- 尝试将 $scope.data 传递到 param 对象中,从控制器传递到 Angular 中的服务
- AngularJs:使用服务传递$scope变量
- AngularJS$scope继承服务
- 如何将$scope传递给服务
- 从 AngularJS 中的服务属性更新$scope
- 通过 .scope().call() 从 JS 外部调用 Angular 服务会挂起请求
- AngularJS:如何将服务方法分配给控制器$scope和ng-repeat(it)
- 从AngularJS中的服务获取数据后,如何更新$scope是最好的方法
- 从AngularJS中的$http服务设置$scope值的最佳方式
- 在服务angularjs中的函数中使用$scope
- 从$http将数据从单独的服务文件获取到$scope中
- 将$scope传递给Angularjs中的服务
- AngularJS$scope.foo是用服务设置的,但后来在同一个控制器中未定义
- 在$http服务中使用$scope作为json数据
- 从服务传递错误消息到控制器$scope
- 将值从控制器传递$scope服务函数