如何从 AngularJS 中的服务获取错误消息?

How getting the ErrorMessage from Service in AngularJS?

我不知道如何从服务访问错误消息。我正在使用 WebAPI2 和 AngularJS.

控制器:

testApp.controller('ModalCtrl', ['$log', '$scope', '$modalInstance', '$rootScope', 'CrudService',
    function ($log, $scope, $modalInstance, $rootScope, CrudService) {
    $scope.updateItem = function (updateItem) {
       CrudService.update(updateItem)
          .success(...)
          .error(function (data) { //doesn't work: CrudService.update(...) is undefined
              $scope.dataError = data.ModelState 
          });
       $scope.ok();
    }

服务:

testApp.factory('CrudService', ['$log', 'resService',
    function ($log, resService) {
    return {
       ...
       update: function (updateItem) {
          updateItem.$update().then(function (response) {
              //SUCCESS MESSAGE definieren
          }, function (response) {
              $log.info('Update ERR:', response.data.ModelState); //Here I'm getting the error messages
              var dataError = []; 
              dataError = response.data.ModelState; //How can I use this in the Ctrl?
          });
       },
    ...

资源服务:

return {
   name: $resource(baseUrl + '/api/name/:Id', {
      Id: '@Id'
   }, {
      'update': {
         method: 'PUT'
      }
   }),

我想使用变量 "dataError" 作为 Ctrl 中的 $scope。我该怎么做?

return {
   ...
   update: function (updateItem) {
      return updateItem.$update();
   },

$scope.updateItem = function (updateItem) {
   CrudService.update(updateItem).then(
      function(resp){

      },
      function(error){
        $scope.dataError = error.data.ModelState;
     }

   );
}

更新

Factory(与服务不同)不会自动 returning 某些东西。
你需要 return 那样。 (或者 return 你的函数包含另一个 return)

testApp.factory('CrudService', ['$log', 'resService',
    return {
       ...
       update: function (updateItem) {
          updateItem.$update().then(function (response) {
              //SUCCESS MESSAGE definieren
          }, function (response) {
              $log.info('Update ERR:', response.data.ModelState); //Here I'm getting the error messages
              var dataError = []; 
              dataError = response.data.ModelState; //How can I use this in the Ctrl?
          });
       },
    ...