Я пытаюсь подобрать angular.js
и работать над выяснением некоторых вещей, которые немного менее документированы.
Рассмотрим это. У меня есть метод поиска на сервере, который принимает параметры запроса и возвращает коллекцию результатов поиска, и отвечает на GET /search.json
route (Rails FWIW).
Итак, с jQuery
пример запроса будет выглядеть так:
$.getJSON('/search', { q: "javascript", limit: 10 }, function(resp) {
// resp is an array of objects: [ { ... }, { ... }, ... ]
});
Я пытаюсь реализовать это с помощью angular и обернуть вокруг себя то, как он работает. Это то, что у меня есть сейчас:
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: [ { ... }, { ... }, ... ]
});
}
}]);
И в представлении:
<body ng-app="searchApp">
...
<div ng-controller="SearchController">
...
<form ng-submit="search()">...</form>
...
</div>
</body>
Однако я продолжаю получать ошибки, такие как TypeError: Object #<Resource> has no method 'push'
и $apply already in progress
.
Похоже, что все будет выглядеть так, как если бы я изменил инициализацию $resource
на следующее:
var Search = $resource("/search.json?" + $.param({ q: "javascript", limit: 10 }));
Search.query(function(resp){ ... });
Кажется более интуитивно понятным инициализировать $resource
один раз, а затем передать различные параметры запроса с изменениями в запрошенном поиске. Интересно, если я делаю это неправильно (скорее всего) или просто неправильно понял документы, вызывающие $resource.query
с объектом params запроса, поскольку первый аргумент возможен. Благодарю.