如何从服务中调用控制器中的函数
How can I call the function in controller from service
请问是否可以调用函数getItems();在 ItemController 控制器(加载数据列表)中来自 fileUpload 服务(上传图像后)- exaple 波纹管。
上传后我想刷新项目列表,但我不知道应该如何写回调...
感谢您的帮助。
app.controller('ItemController', ['$scope', '$http', 'fileUpload', function($scope, $http, fileUpload){
getItems();
function getItems(){
$http.post("../db/getItems.php").success(function(data){
$scope.items = data;
});
};
...
...
...
...
app.service('fileUpload', ['$http', function ($http) {
this.uploadFileToUrl = function(file, object, extId){
var fd = new FormData();
fd.append('file', file);
$http.post("../db/upload.php?object="+object+"&extId="+extId, fd, {
transformRequest: angular.identity,
headers: {'Content-Type': undefined}
})
.success(function(data){
alert(JSON.stringify(data));
ItemController.getItems(); // <= Here....after upload I would like to call function getItems()
})
.error(function(){
});
}
}]);
您应该做的是,从服务方法中执行 return $http 承诺,然后在该承诺成功时调用您的控制器方法。将控制器函数执行到服务中并不是一个好的做法,尽管您可以通过将函数作为回调传递来实现它。
this.uploadFileToUrl = function(file, object, extId){
var fd = new FormData();
fd.append('file', file);
return $http.post("../db/upload.php?object="+object+"&extId="+extId, fd, {
transformRequest: angular.identity,
headers: {'Content-Type': undefined}
});
};
然后在控制器中,您可以调用服务方法,然后在解决该承诺时执行控制器函数
fileUpload.uploadFileToUrl().then(function(data){
getItems(); //controller function.
})
请问是否可以调用函数getItems();在 ItemController 控制器(加载数据列表)中来自 fileUpload 服务(上传图像后)- exaple 波纹管。
上传后我想刷新项目列表,但我不知道应该如何写回调...
感谢您的帮助。
app.controller('ItemController', ['$scope', '$http', 'fileUpload', function($scope, $http, fileUpload){
getItems();
function getItems(){
$http.post("../db/getItems.php").success(function(data){
$scope.items = data;
});
};
...
...
...
...
app.service('fileUpload', ['$http', function ($http) {
this.uploadFileToUrl = function(file, object, extId){
var fd = new FormData();
fd.append('file', file);
$http.post("../db/upload.php?object="+object+"&extId="+extId, fd, {
transformRequest: angular.identity,
headers: {'Content-Type': undefined}
})
.success(function(data){
alert(JSON.stringify(data));
ItemController.getItems(); // <= Here....after upload I would like to call function getItems()
})
.error(function(){
});
}
}]);
您应该做的是,从服务方法中执行 return $http 承诺,然后在该承诺成功时调用您的控制器方法。将控制器函数执行到服务中并不是一个好的做法,尽管您可以通过将函数作为回调传递来实现它。
this.uploadFileToUrl = function(file, object, extId){
var fd = new FormData();
fd.append('file', file);
return $http.post("../db/upload.php?object="+object+"&extId="+extId, fd, {
transformRequest: angular.identity,
headers: {'Content-Type': undefined}
});
};
然后在控制器中,您可以调用服务方法,然后在解决该承诺时执行控制器函数
fileUpload.uploadFileToUrl().then(function(data){
getItems(); //controller function.
})