angularjs - remove - ngx-restangular
¿Cuál es la diferencia entre.all() y.one() en Restangular? (3)
La función one()
tiene un segundo argumento que acepta una identificación, por ejemplo, .one(''users'', 1)
.
-
one(''users'', 1).get()
traduce a/users/1
-
all(''users'').getList()
traduce en/users
A diferencia de all()
, one()
generalmente no se usa con .getList()
sin argumento. Sin embargo, si llamaras a .one(''users'', 1).getList(''emails'')
o .one(''users'', 1).all(''emails'').getList()
, harías una GET solicitud a /users/1/emails
.
¿Cuál es la diferencia entre estos dos? Ambos parecen hacer un GET a / usuarios y recuperarlos.
Restangular.one(''users'').getList().then(function(users) {
// do something with users
});
Restangular.all(''users'').getList().then(function(users) {
// do something with users
});
Entiendo que puedes hacer uno (''usuarios'', 123) y recuperará / users / 123, pero sin el segundo argumento parece ser lo mismo. ¿Por qué no tener solo un método en ese caso?
Recientemente descubrí una diferencia entre estos métodos. Sí, ambos hacen las mismas solicitudes de obtención, pero los resultados que obtengas pueden sorprenderte (ya que me sorprendieron).
Supongamos que tenemos un método API / usuarios que devuelve no estrictamente una matriz, sino algo como esto:
{
"result": [{...}]
}
Por lo tanto, una matriz se devuelve como un valor de algún elemento del objeto de respuesta. En este caso get () y getList () funcionan de manera diferente. Este código funciona bien:
Restangular.get(''users'').then(function (response) {...});
Su controlador de respuesta se invoca después de que se recibió la respuesta. Pero este código no parece funcionar:
Restangular.all(''users'').getList().then(function (response) {...});
El controlador de respuesta no se invoca, a pesar de que la solicitud se completó con el código de estado 200 y la respuesta no vacía. La consola del navegador no muestra ningún error y el monitor de red muestra una solicitud exitosa.
He probado esto con Restangular 1.5.2, por lo que probablemente ya esté solucionado en las versiones más nuevas.
Supongo que están ahí para expresar una intención de lo que vas a hacer. Lo entendería como una forma de construir la url, expresando si está accediendo a todo el recurso o a uno específico.
Al final, van a compilar y hacer una solicitud GET, pero debido a que usted hace un GET y recupera algunos datos, no significa que deba usarse de esa manera.
Ejemplo extraído de https://github.com/mgonto/restangular/issues/450
getList se puede llamar en ambos sentidos. Si se llama en un elemento uno, entonces necesita un subelemento para llegar a una Colección. De lo contrario, recupera la colección. Entonces el siguiente es el mismo:
Restangular.one(''places'', 123).getList(''venues'') // GET /places/123/venues
Restangular.one(''places'', 123).all(''venues'').getList() // GET /places/123/venues
Como puede ver, es más expresivo llamar a uno (''lugares'', 123) .all (''lugares'') para comprender que solo quiere los lugares ubicados en el área / lugar 123.
Tal vez la siguiente URL lo ayudará a: