example - AngularJS-Usando $ resource.query con el objeto params
ngresource crud (1)
TypeError: el objeto # no tiene un método ''push'' y $ se aplica ya en progreso
Porque no ha definido un recurso con el nombre Buscar . Primero necesitas definir tal recurso. Doc: $ recurso . Aquí hay una implementación de ejemplo.
angular.module(''MyService'', [''ngResource''])
.factory(''MyResource'', [''$resource'', function($resource){
var MyResource = $resource(''/api/:action/:query'',{
query:''@query''
}, {
search: {
method: ''GET'',
params: {
action: "search",
query: ''@query''
}
}
});
return MyResource;
}]);
Incluya este módulo en su aplicación y utilícelo en un controlador como este
$scope.search_results = MyResource.search({
query: ''foobar''
}, function(result){});
Sin embargo, no estoy seguro de si esto es lo que necesita. El servicio de recursos interactúa con las fuentes de datos del lado del servidor REST, también conocidas como API REST.
Tal vez usted necesita simplemente un http http:
$http({method: ''GET'', url: ''/someUrl''}).
success(function(data, status, headers, config) {
// this callback will be called asynchronously
// when the response is available
}).
error(function(data, status, headers, config) {
// called asynchronously if an error occurs
// or server returns response with an error status.
});
Estoy tratando de captar angular.js
y trabajando para descubrir algunas de las cosas que están menos documentadas.
Considere esto: tengo un método de búsqueda en el servidor que acepta parámetros de consulta y devuelve una colección de resultados de búsqueda, y responde a la ruta GET /search.json
(Rails FWIW).
Así que con jQuery
, una consulta de muestra se vería así:
$.getJSON(''/search'', { q: "javascript", limit: 10 }, function(resp) {
// resp is an array of objects: [ { ... }, { ... }, ... ]
});
Estoy intentando implementar esto usando angular, y envuelvo mi cabeza en torno a cómo funciona. Esto es lo que tengo ahora:
var app = angular.module(''searchApp'', [''ngResource'']);
app.controller(''SearchController'', [''$scope'', ''$resource'', function($scope, $resource){
$scope.search = function() {
var Search = $resource(''/search.json'');
Search.query({ q: "javascript", limit: 10 }, function(resp){
// I expected resp be the same as before, i.e
// an array of Resource objects: [ { ... }, { ... }, ... ]
});
}
}]);
Y en la vista:
<body ng-app="searchApp">
...
<div ng-controller="SearchController">
...
<form ng-submit="search()">...</form>
...
</div>
</body>
Sin embargo, sigo recibiendo errores como TypeError: Object #<Resource> has no method ''push''
y $apply already in progress
.
Las cosas parecen funcionar como se esperaba si cambio la inicialización de $resource
a lo siguiente:
var Search = $resource("/search.json?" + $.param({ q: "javascript", limit: 10 }));
Search.query(function(resp){ ... });
Parece más intuitivo inicializar $resource
una vez y luego pasar diferentes parámetros de consulta con cambios en la búsqueda solicitada. Me pregunto si lo estoy haciendo mal (lo más probable) o simplemente malentendí los documentos que llaman a $resource.query
con el objeto de parámetros de consulta como el primer argumento es factible. Gracias.