我如何将服务响应数据输入 md 对话框 angularjs?

how do i get the service response data into the md dialog angularjs?

我创建了这样的自定义服务

  app.service('userService', function($http,UrlService) {
    return {
        init: function(callback) {
            $http.get(UrlService.baseUrl +'/api/users/list').then(function(user_response) {
                callback(user_response);

            });
        }
    }
})

在我的项目主控制器中,我使用这样的方法来获取 angular material 设计模式。

  $scope.replyComplaint = function(user,complaint_id) {

        complaint_id=user._id;
        console.log(complaint_id)
        $mdDialog.show({
                controller: DialogCtrl,
                templateUrl: 'submodules/user_management/replydialog.html',
                resolve: { complaint_id : function() {return complaint_id;} },
                 locals: {
                   users: $scope.users
                 },
                parent: angular.element(document.body),
                clickOutsideToClose: true,
            })
            .then(function(response) {
                $scope.response = response;
                console.log(response);
            }, function() {
                //fail
            });
    };

为 angular material 文档中的对话框创建了另一个控制器,如下所示

function DialogCtrl($scope, $rootScope, $mdDialog, users,complaintService, UrlService, $http) {
    complaintService.init(function(complaint_response) {
           $scope.complaints = complaint_response.data;
           $scope.getUsers();
        });

$scope.getUsers = function(complaint_id) {
     console.log(complaint_id);
    $scope.hide = function() {
        $mdDialog.hide();
    };
    $scope.cancel = function() {
        $mdDialog.cancel();
    };
    $scope.replyMail = function(complaint_id) {
             console.log(complaint_id);
        $http.post(UrlService.baseUrl + '/api/complaints/complaint/'+complaint_id , {
                complaint: "replyText"
            }, $scope)
            .then(function(response) {
                console.log(name);
                $state.reload();
            }, function(response) {
                console.log(name);
            });
    }
}
}

现在,我需要在 DialogController 中获取 user_response 数据。如果我将 console.log('$scope.users') 放入此 userservice.init 函数中,我可以获得数据。但不在它之外。如何获取 userService.init 函数之外的响应数据

 userService.init(function(user_response) {
        $scope.users = user_response.data; 
    });        //this is added in DialogController

主要目的是获取post请求回复邮件功能中的user.comlaint_id。 user.complaint_id 是 user_response 的一部分 任何人都请帮助我。谢谢

这是解决方案

userService.init(function(user_response) {
    $scope.users = user_response.data;
    $scope.init();
});

$scope.init = function() {
You can access $scope.users here
}

调用您需要 $scope.users

的任何方法而不是 init()

$http.get调用returns一个承诺,你可以直接使用它。

app.service('userService', function($http,UrlService) {
  return {
    init: function(callback) {
        return $http.get(UrlService.baseUrl +'/api/users/list');
    }
  }
});

控制器:

function Dialog($scope,$rootScope, $mdDialog,userService,UrlService,$http) {
  // console.log(userService.init());

  init();

  function init() {
    userService.init().then(function(response) {
      $scope.users = response.data; 
    });
  }
}

这还有更容易处理错误的优点:

function Dialog($scope,$rootScope, $mdDialog,userService,UrlService,$http) {
  // console.log(userService.init());

  init();

  function init() {
    userService.init().then(function(response) {
      $scope.users = response.data; 
    }, function(error) {
      // handle error
    });
  }
}    

您应该阅读 angular/javascript 承诺及其链接机制:angular promises