我正在尝试angular.js
了解并努力找出一些记录较少的事情。
考虑一下 - 我在服务器上有一个搜索方法,它接受查询参数并返回搜索结果的集合,并响应 GET /search.json
路由(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
将查询参数对象作为第一个参数调用是可行的文档。谢谢。