angular.js
私は、あまり文書化されていないもののいくつかを取り上げて理解しようとしています。
これを考慮してください-サーバーには、クエリパラメーターを受け入れて検索結果のコレクションを返し、 GET /search.json
ルートに応答する検索メソッドがあります(Rails FWIW)。
ではjQuery
、サンプル クエリは次のようになります。
$.getJSON('/search', { q: "javascript", limit: 10 }, function(resp) {
// resp is an array of objects: [ { ... }, { ... }, ... ]
});
私は角度を使用してこれを実装しようとしており、それがどのように機能するかについて頭を悩ませています。これは私が今持っているものです:
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
、最初の引数として query params オブジェクトを呼び出すことが可能であるというドキュメントを誤解しただけなのだろうか。ありがとう。