cloak angularjs node.js ionic

angularjs - cloak - ng-init



Evento de eliminaciĆ³n de AngularJS ngResource no llamando de devoluciĆ³n de llamada (4)

En su código, el segundo argumento es angular.noop :

dogsResource.delete({id: $stateParams.dogId}, angular.noop, function(value, responseHeaders){ //Success console.log(value); console.log(responseHeaders); }, function(httpResponse){ //Error console.log(httpResponse); } );

De acuerdo con el código fuente de ngResource , si establece el segundo argumento para una función ( angular.noop es una función), entonces usará el segundo argumento como devolución de llamada exitosa. Como el segundo argumento es una no operación, no pasará nada cuando se llame.

Intente configurar el segundo argumento para la function (r) { console.log (r) } y vea lo que obtiene.

Tengo este código:

dogsResource.delete({id: $stateParams.dogId}, angular.noop, function(value, responseHeaders){ //Success console.log(value); console.log(responseHeaders); }, function(httpResponse){ //Error console.log(httpResponse); } );

La eliminación está hecha , el problema es que no se llama ni a éxito ni a error. También intenté usar una instancia (es decir, usar $ delete), pero tampoco funcionó.

Intenté probar las devoluciones de llamada con otros métodos, como obtener

$scope.dog = dogsResource.get({id: $stateParams.dogId}, function(value, res){ console.log(value); });

Y funciona. No sé por qué sucede eso, ya que el perro está siendo eliminado de la base de datos.

Gracias

ACTUALIZAR

Código dogResource

// Return the dogs resource .factory(''dogsResource'', [''$resource'', function($resource){ return $resource("http://localhost:5000/dogs/:id",{id: "@id"},{update: {method: "PUT"}}); }])

ACTUALIZACIÓN 2

Encontré el error. Estaba en la API RESTful (nodo js). El método no enviaba nada a Angular, por lo que no se activó ninguna devolución de llamada:

//DELETE - Delete a dog with specified ID exports.deleteDog = function(req, res) { console.log(''DELETE'' + req.params.id); Dog.findById(req.params.id, function(err, dog) { dog.remove(function(err) { if(err) return res.status(500).send(err.message); console.log(''Succesfully deleted.''); res.status(200); }) }); };

Al reemplazar res.status(200) con res.status(200).end() se desencadenó la devolución de llamada.

Gracias a todos por su tiempo.


Use el retorno de promesa por el objeto $resource . Como $ resource object devuelve por defecto un objeto promesa, y ese objeto prometido está disponible .$promise variable sobre ese $resource método API.

Código

dogsResource.delete({id: $stateParams.dogId}).$promise.then(function(data)//Success console.log(value); }, function(httpResponse){ //Error console.log(httpResponse); });


Recientemente estoy trabajando con ngResource. En mi caso, he usado tres parámetros en esa llamada de API. Por lo tanto, podrías usar

dogsResource.delete({id: $stateParams.dogId}, function(value, responseHeaders){ //Success console.log(value); console.log(responseHeaders); }, function(httpResponse){ //Error console.log(httpResponse); } );

Espero que eso ayude.


Te sugiero que no uses

res.status (200) .end ()

De hecho, generalmente cuando elimina un objeto con un servicio REST en expressJS, el caso común es enviar el objeto eliminado como respuesta, porque podría ser útil para que el frontend obtenga este objeto (y para asegurarse de que sea el objeto bueno) .

Entonces en vez de usar

res.status (200) .end ()

utilizar

res.send (perro)

O si desea enviar una respuesta vacía, el código de estado para una operación de eliminación debe ser:

res.status (204) .end ()

204 SIN CONTENIDO

Tenga en cuenta que no necesita configurar el código de estado de manera predeterminada, será de 200. Por lo tanto, establecer el código de estado en 200 es inútil.

Y para finalizar, se debe enviar una respuesta http para cerrar la solicitud. El método del final o el método de envío lo hacen. Establezca un código de estado en una respuesta http nunca enviará nada a la interfaz. Es por eso que su devolución de llamada angular nunca se activó.

Así que le sugiero que agregue la etiqueta expressjs a su pregunta, porque no es un problema de AngularJS, sino un error real de expressJS.