1

私はこのようなカスタムサービスを作成しました

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

            });
        }
    }
})

プロジェクトのメインコントローラー内で、このように使用して角度のあるマテリアルデザインモーダルを取得しました。

  $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
            });
    };

次のように、角材ドキュメントのように、ダイアログ用の別のコントローラーを作成しました

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);
            });
    }
}
}

今、私はでuser_responseデータを取得する必要がありますDialogControllerconsole.log('$scope.users')このuserservice.init関数の中に入れると、データを取得できます。しかし、それの外ではありません。userService.init 関数の外で応答データを取得する方法

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

主な意図はuser.comlaint_id、返信メール機能の投稿リクエストで取得することです。その user.complaint_id は user_response の一部です 誰でも私を助けてください。ありがとう

4

2 に答える 2

2

$http.get呼び出しは promise を返します。それをそのまま使用できます。

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

于 2016-05-12T11:58:40.693 に答える
1

ここに解決策があります

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

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

$scope.users が必要な init() の代わりに任意のメソッドを呼び出します

于 2016-05-12T11:40:58.847 に答える