我正在使用Angular Resources尝试使用Angular $保存功能。

默认情况下,$保存将模型发送回服务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.userdata.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