Правильный способ пользователя Angular Resource Service $ Функция сохранения

StackOverflow https://stackoverflow.com/questions/19839239

Вопрос

Я работаю с угловыми ресурсами, пытаясь использовать функцию Save Angular $.

По умолчанию $ save отправляет модель обратно на URL -адрес службы. Тем не менее, похоже, что ожидается, что модель будет возвращена в службу (моя модель пуста, если я этого не сделаю). Мне было интересно, как лучший способ вернуть сообщения и ошибки для контроллера.

Мое решение состояло в том, чтобы создать новый класс в моем PHP, который имеет массив ошибок, в котором хранятся любые ошибки, возникающие при обработке, и поле, которое хранит модель для возврата. Затем он отправляется обратно и обрабатывается в функции спины вызовов:

$scope.ApplyChanges=function(){
   console.log("saving...");
    $scope.user.$save(function(data){
      console.log(data);
      if (data.errors.length>0){
         for (error in data.errors){
            $scope.alerts.push({type:'danger', msg: data.errors[error].msg});
         }
         $scope.user=User.get({id:data.data.UserName});
      } else {
         $scope.user=User.get({id:data.data.UserName});
         $scope.alerts.push({type:'success', msg: "User data saved successfully"});
      }
    }, function(err){
         $scope.alerts.push({type:'danger', msg: "There was a problem saving your data: " + err});
    });

Эти строки здесь: $scope.user=User.get({id:data.data.UserName}); Я должен был использовать, потому что если я только что назначил свой $scope.user к data.data, пользователь больше не использовал службу, и я получил ошибку, когда попытался ApplyChanges опять таки.

Итак, есть ли способ сделать это более, кажется,? Поскольку я должен сделать дополнительный звонок, чтобы получить модель. Должен ли я отправить ошибку, только если есть ошибка, а затем получить дополнительный обратный вызов, чтобы получить модель? Есть ли способ лучше?

Это было полезно?

Решение

Прежде всего, ваш сервер должен вернуть ошибки с релевантными Коды состояния ошибок HTTP (См. Коды 4xx и 5xx). Таким образом, вы обрабатываете только ошибки в обратном вызове ошибки:

function onError (response){
    switch (response.status) {
    case 400:
    case 404:
    //etc... 
        response.data.errors.forEach(function(error){
            $scope.alerts.push({type:'danger', msg: error.msg});
        });
        break;
    case 500:
        $scope.alerts.push({type:'danger', msg: "There was a problem saving your data: " + response.data});
        break;
    }
}

Тем не менее, если $ scope.user - это $ Ресурс экземпляр, Тогда вам не нужно получить его снова с сервера, метод $ save () не изменит объект.

Чтобы копировать значения из объекта «пользователя», полученного с сервера в $ scope.user просто используйте Angular.Extend ()

angular.extend($scope.user, data) //this updates $scope.user with data attributes.

Стоит отметить, что angular.extend не выполняет глубокую копию, если необходимо, используйте jquery.extend:

jQuery.extend(true, $scope.user, data)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top