質問

Angular $ 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.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がaの場合 $リソースインスタンス, 、そうすれば、サーバーから再度取得する必要はありません。$ 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