Sto cercando di raccogliere angular.js
e di cercare di capire alcune delle cose che sono un po 'meno documentate.
Considera questo: sul server è presente un metodo di ricerca che accetta parametri di query e restituisce una raccolta di risultati di ricerca e risponde al percorso GET /search.json
(Rails FWIW).
Così con jQuery
, una query di esempio sarebbe simile a questa:
$.getJSON('/search', { q: "javascript", limit: 10 }, function(resp) {
// resp is an array of objects: [ { ... }, { ... }, ... ]
});
Sto cercando implementare questo utilizzando angolare, e avvolgere la mia testa intorno come funziona. Questo è quello che ho adesso:
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: [ { ... }, { ... }, ... ]
});
}
}]);
E nella vista:
<body ng-app="searchApp">
...
<div ng-controller="SearchController">
...
<form ng-submit="search()">...</form>
...
</div>
</body>
Tuttavia, continuo a ricevere errori come TypeError: Object #<Resource> has no method 'push'
e $apply already in progress
.
Le cose sembrano funzionare come previsto se cambio l'inizializzazione $resource
al seguente:
var Search = $resource("/search.json?" + $.param({ q: "javascript", limit: 10 }));
Search.query(function(resp){ ... });
Sembra più intuitivo per inizializzare il $resource
volta e poi passare diversi parametri di query con i cambiamenti nella ricerca richiesto. Mi chiedo se sto sbagliando (molto probabilmente) o semplicemente frainteso i documenti che chiamare il $resource.query
con l'oggetto params query come il primo argomento è fattibile. Grazie.
Vuol impostazione 'var Ricerca = $ risorse (...)' in anticipo, non fare il trucco? Suppongo che stia ancora elaborando l'idea di servizi e fabbriche in modo angolare. Inoltre, il mio primo tentativo è stato con '$ http' e ha funzionato bene. Volevo provare anche '$ resource', solo per avere un'idea dell'utilizzo di entrambi. Grazie! – sa125
Hm var Search = $ resource (...) è effettivamente corretto. Tuttavia, la risorsa si aspetta un oggetto da restituire ma si restituisce un array? prova a impostare isArray: true sul tuo metodo di ricerca, problema simile https://groups.google.com/forum/#!topic/angular/MT1vIakNEVM –
Perché sostituisci il parametro di ricerca? – Vincent