如何从服务中调用控制器中的功能

时间:2016-06-28 20:44:53

标签: javascript angularjs controller angularjs-service angularjs-controller

我想询问是否有可靠的调用函数 getItems();在 ItemController控制器(它加载数据列表)来自 fileUpload service (在上传图像之后) - 请点击下面的内容。

上传后我想刷新项目列表,但我不知道应该如何编写回调...

感谢您的帮助。



    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(){
               });
        }
     }]);
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:0)

你应该做的是,从服务方法&amp;中返回$ 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}
   });
};

然后在控制器内部,您可以调用服务方法&amp;然后在解决该承诺时执行控制器功能

fileUpload.uploadFileToUrl().then(function(data){
   getItems(); //controller function.
})