Pergunta

Estou trabalhando com recursos angulares tentando usar a função angular $ salvar.

Por padrão, $ save envia o modelo de volta ao URL de serviço. No entanto, parece que espera que o modelo seja devolvido ao serviço (meu modelo está vazio se eu não fizer isso). Eu queria saber qual é a melhor maneira de retornar mensagens e erros ao controlador.

Minha solução foi criar uma nova classe no meu PHP que tenha uma matriz de erros que armazena quaisquer erros encontrados no processamento e um campo que armazena o modelo para retornar. Em seguida, é enviado de volta e processado na função de devolução:

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

essas linhas aqui: $scope.user=User.get({id:data.data.UserName}); Eu tive que usar porque se acabei de atribuir meu $scope.user para data.data, o usuário não estava mais usando o serviço e eu recebia um erro quando tentei ApplyChanges novamente.

Então, existe uma maneira de fazer isso com mais aparência? Como está, tenho que fazer uma chamada adicional de volta para obter o modelo. Devo enviar um erro apenas se houver um erro e depois ter um retorno de chamada adicional para obter o modelo? Existe uma maneira melhor?

Foi útil?

Solução

Primeiro de tudo, seu servidor deve retornar erros com relevantes Códigos de status de erro HTTP (Consulte códigos 4xx e 5xx). Dessa forma, você apenas lida com erros no retorno de chamada de erro:

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

Dito isto, se $ scope.user for um $ instância de recurso, então você não precisa obtê -lo novamente do servidor, o método $ salv () não alterará o objeto.

Para copiar valores do objeto 'Usuário' recuperado do servidor para o $ SCOPE.USER BET angular.extend ()

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

Vale a pena notar que angular.extend não executa uma cópia profunda, se necessário, use jQuery.Extend:

jQuery.extend(true, $scope.user, data)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top