Question

Je travaille avec des ressources angulaires en essayant d'utiliser la fonction Angular $ Save.

Par défaut, $ SAVE renvoie le modèle à l'URL de service. Cependant, il semble qu'il s'attend à ce que le modèle soit retourné au service (mon modèle est vide si je ne fais pas cela). Je me demandais quelle est la meilleure façon de retourner les messages et les erreurs au contrôleur.

Ma solution était de créer une nouvelle classe dans mon PHP qui a un tableau d'erreurs qui stocke toutes les erreurs rencontrées dans le traitement et un champ qui stocke le modèle de retour. Il est ensuite renvoyé et traité dans la fonction de rappel:

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

Ces lignes ici: $scope.user=User.get({id:data.data.UserName}); Je devais utiliser parce que si je viens de céder mon $scope.user à data.data, l'utilisateur n'utilisait plus le service et j'aurais une erreur lorsque j'essayais de ApplyChanges encore.

Alors, y a-t-il un moyen de faire cela plus apparemment? En l'état, je dois faire un rappel supplémentaire pour obtenir le modèle. Dois-je envoyer une erreur uniquement s'il y a une erreur et ensuite avoir un rappel supplémentaire pour obtenir le modèle? Y a-t-il une meilleure façon?

Était-ce utile?

La solution

Tout d'abord, votre serveur doit renvoyer les erreurs avec pertinent Codes d'état d'erreur HTTP (Voir codes 4xx et 5xx). De cette façon, vous ne gérez que des erreurs dans le rappel d'erreur:

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

Cela dit, si $ scope.User est un $ instance de ressource, alors vous n'avez pas à l'obtenir à nouveau à partir du serveur, la méthode $ sauve () ne modifiera pas l'objet.

Pour copier les valeurs de l'objet «utilisateur» récupéré du serveur dans le $ Scope.User utilise simplement angular.extend ()

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

Vaut la peine de noter que angular.extend n'effectue pas de copie profonde, si nécessaire, utilise jQuery.extend:

jQuery.extend(true, $scope.user, data)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top