是否可以在AngularJS中的资源上设置默认查询参数?

时间:2014-05-23 12:05:39

标签: javascript angularjs ngresource

如果我有一个如下定义的简单资源,我的理解是我可以调用Receipt.query()方法从服务器获取一个集合。我的理解是,如果我拨打Receipt.query({freightBill: 123}),则会将FreightBill添加为/distribution/inbound?freightBill=123等查询参数。我怎么能以这种方式传递查询参数,但是从我的工厂那里,还为页面,大小和排序添加默认查询参数?

生成的请求可能看起来像/distribution/inbound?freightBill=123&page=0&size=20&sort=number,desc

angular.module('webappApp')
  .factory('receipts', function ($http, $resource, $location) {
    var search = $location.search();
    var page = search.page||0;
    var size = search.size||20;
    var sort = search.sort||'number,desc';

    return $resource('/distribution/inbound');
  });

2 个答案:

答案 0 :(得分:4)

$ resource的第二个参数是默认参数。 DOCS:Link

angular.module('webappApp')
  .factory('receipts', function ($http, $resource, $location) {
    return $resource('/distribution/inbound',{page:0,size:20,sort:'number,desc'});
  });

这些使他们成为默认'。这意味着您可以通过将新值传递给.query来覆盖 Receipt.query({freightBill: 123,size:20,page:2})

答案 1 :(得分:0)

要回答我自己的问题,实际上非常简单......只需将查询参数附加到资源路径即可。调用Receipt.query({freightBill: 123})时,Angular会智能地将&freightBill=123附加到路径的末尾。如果没有页面,大小和排序参数,Angular只会附加?freightBill=123,因为它是唯一的参数。

angular.module('webappApp')
  .factory('receipts', function ($http, $resource, $location) {
    var search = $location.search();
    var page = search.page||0;
    var size = search.size||20;
    var sort = search.sort||'number,desc';

    return $resource('/distribution/inbound?page=' + page + '&size=' + size + '&sort=' + sort);
  });