Próbuję odebrać angular.js
i pracuję nad określeniem niektórych rzeczy, które są nieco mniej udokumentowane.
Rozważ to - Mam metodę wyszukiwania na serwerze, która akceptuje parametry zapytania i zwraca kolekcję wyników wyszukiwania i odpowiada na trasę GET /search.json
(Rails FWIW).
Więc z jQuery
, zapytanie próbka będzie wyglądać następująco:
$.getJSON('/search', { q: "javascript", limit: 10 }, function(resp) {
// resp is an array of objects: [ { ... }, { ... }, ... ]
});
próbuję zaimplementować to korzystając kanciasty i owinąć głowę wokół, jak to działa. To jest to, co mam teraz:
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: [ { ... }, { ... }, ... ]
});
}
}]);
I w widoku:
<body ng-app="searchApp">
...
<div ng-controller="SearchController">
...
<form ng-submit="search()">...</form>
...
</div>
</body>
Jednak wciąż otrzymuję błędów takich jak TypeError: Object #<Resource> has no method 'push'
i $apply already in progress
.
rzeczy wydają się pracować zgodnie z oczekiwaniami, jeśli zmienię inicjalizacji $resource
na następujące kwestie:
var Search = $resource("/search.json?" + $.param({ q: "javascript", limit: 10 }));
Search.query(function(resp){ ... });
Wydaje się bardziej intuicyjne zainicjować $resource
raz, a następnie przechodzą różne parametry zapytania ze zmianami w wymaganym wyszukiwania. Zastanawiam się, czy robię to źle (najprawdopodobniej) lub po prostu źle rozumiem dokumenty, które wywołujące $resource.query
z obiektem params zapytania jako pierwszym argumentem jest wykonalne. dzięki.
Czy ustawienie 'var search = $ zasobu (...)' wcześniej nie rade? Przypuszczam, że wciąż pracuję nad koncepcją usług i fabryk w kanciastym. Również moja pierwsza próba dotyczyła '$ http' i działała dobrze. Chciałem też wypróbować '$ resource', aby uzyskać wyczucie używania. Dzięki! – sa125
Hm var Search = $ resource (...) jest rzeczywiście poprawne. Jednak zasób oczekuje, że obiekt zostanie zwrócony, ale zwrócisz tablicę? spróbuj ustawić isArray: true w metodzie zapytania, podobny problem https://groups.google.com/forum/#!topic/angular/MT1vIakNEVM –
Dlaczego przesuwasz parametr zapytania? – Vincent