javascript - understanding - Cómo eliminar $ promise y $ resolvió del objeto json
promises javascript w3schools (10)
¿Está utilizando isArray
o .query()
con su objeto $resource
?
De los documentos de $ resource: isArray – {boolean=} – If true then the returned object for this action is an array.
ACTUALIZAR:
Si está usando $resource
correctamente, algunas de las opciones que tiene son:
1) Haga que el backend devuelva los datos contenidos dentro de un objeto, por ejemplo. { data: [] }
lugar de solo una matriz.
2) Si eso no es posible, use la devolución de llamada de $resource.query()
, por ejemplo.
MyResource.query({ myParams: ''something''}, function(result) {
// Do something with the plain result
});
Estoy usando $ resource en angular para obtener el objeto json y su estructura se define a continuación
[
{
"id": 0,
"name": "Type1"
},
{
"id": 1,
"name": "Type 2"
}
]
después de obtener los datos ... console.log (jsonObject) me da
[Resource, Resource, $promise: Object, $resolved: true]
¿Cómo puedo eliminar $ promesa y $ resuelto del objeto resultante? Intenté angular.fromJson (json) pero todavía veo que estos objetos todavía existen.
A partir de esta respuesta , parece que yourResource.toJSON()
está disponible.
Correcto, me enfrenté al mismo problema varias veces y siempre terminé usando $ http en lugar de $ resource, sin embargo , hoy decidí tratar y lidiar con este problema. Espero que alguien también encuentre útil este día.
Entonces, después de recibir su objeto con $ promesa dentro de él, lo que hace es usar angular.copy(data)
, así:
someService.getSomething($scope.someId).$promise.then(function (data) {
if (data) {
$scope.dataWithoutPromise = angular.copy(data);
}
});
Después de eso, verá que su dataWithoutPromise
solo contiene los objetos que necesita, y $ promesa y $ resuelto se han ido.
Ejemplo de mi proyecto
Diary.getSharedWithMe(function(data) {
delete data.$promise;
delete data.$resolved;
_self.sharedDiariesWithMe = data;
}, function(error) {
console.log(error)
});
Estoy buscando la misma respuesta, pero en este momento solo conozco este feo truco:
Para escribir una func como esta:
function cleanResponse(resp) {
return JSON.parse(angular.toJson(resp));
}
y llámalo en cada consulta (fea, sí):
function getSmt() {
Resource.get({}, function (data) {
$scope.some = cleanResponse(data);
}, function (responce) {
//handle error
})
}
Seré feliz si alguien me enseñara a hacerlo correctamente.
Estoy enfrentando el mismo problema. De hecho, simplemente tiene que usar la misma versión de recurso angular y angular y funcionará a la perfección. Espero eso ayude !
Hice este método reutilizable rápido para angular.toJson (Las propiedades con $$ angular.toJson ):
yourApp.factory(''Service'', [''$resource'', function ($resource) {
return $resource(''your/rest/api/path'');
}]);
yourApp.factory(''commonServices'', function () {
return {
toJson : function(response){
return JSON.parse(angular.toJson(response));
//*or*
//return angular.toJson(response);
}
});
Y luego algo como esto en tu controlador:
yourApp.controller(''Controller'', [''$scope'', ''Service'',''commonServices'',
function ($scope, Service, commonServices) {
Service.get().then(function (data) {
$scope.myData = commonServices.toJson(data);
});
});
La forma más sencilla es agregar angular.toJson en el controlador.
yourApp.controller(''Controller'', [''$scope'', ''Service'',
function ($scope, Service, commonServices) {
Service.get().then(function (data) {
$scope.myData = angular.toJson(data);
});
});
Intenta codificar algo como esto en tu servicio:
yourApp.factory(''Service'', [''$resource'', function ($resource) {
return $resource(''your/rest/api/path'');
}]);
Y luego algo como esto en tu controlador:
yourApp.controller(''Controller'', [''$scope'', ''Service'', function ($scope, Service) {
Service.get().then(function (data) {
$scope.myData = data;
});
});
Por favor simplemente haga esto:
jsonObject. $ promise = undefined; jsonObject. $ resolvió = indefinido;
$ promesa y $ resuelto no se eliminarán, pero podrá hacer lo que quiera.
Respuesta corta: angular.fromJson (angular.toJson (resp)); Esto eliminará todas las funciones "específicas del ángulo", etc. y le devolverá un objeto de datos limpio.