ngResource GET与过滤器值

时间:2015-08-30 21:54:03

标签: angularjs rest

我正在编写一个小型测试应用程序,我可以从parse.com数据库中检索我的客户。

我在html中有以下表格

...
<body ng-app="myApp">
    <div ng-controller="CustomerController">
        <button ng-click="getCustomers()">Get customers</button>
        <ul>
            <li ng-repeat="customer in customers">{{ customer.name }}</li>
        </ul>
    </div>
</body>
...

我的角度应用程序如下:

模块

var app = angular
    .module('myApp', ['ngResource'])
    .constant('myConfig', {
        'api_url': 'https://api.parse.com/1/classes/',
        'parse_application_id': 'xxxxxxxxxxxxx',
        'parse_rest_api_key': 'xxxxxxxxxxxxx'   
});

app.factory('CustomersService', function($resource, myConfig) {
    return $resource(myConfig.api_url + 'Customer', {}, {
        query: { 
            method: 'GET', 
            isArray: false,
            headers: {
                'X-Parse-Application-Id': myConfig.parse_application_id,
                'X-Parse-REST-API-Key': myConfig.parse_rest_api_key
            }
        },
        create: { 
            method: 'POST',
            headers: {
                'X-Parse-Application-Id': myConfig.parse_application_id,
                'X-Parse-REST-API-Key': myConfig.parse_rest_api_key
            }
        }
    })
});

控制器:

app.controller('CustomerController', function($scope, CustomersService, CustomerService) {
     $scope.getCustomers = function() { 
         CustomersService.query().$promise.then(function(result) {  
            $scope.customers = result.results;
         });                 
     };
 });

所以当我点击我的按钮时,一切都按照它应该的方式工作。 但是,当我想从数据库中检索客户时,我还想按名称添加过滤器。 当我在Postman中执行以下内容时

https://api.parse.com/1/classes/Customer?where={"name":"aaaaa"}

这种方法有效,只能获得名为“aaaaa”的客户。所以我知道语法没问题。

因此,我将添加一个文本框,用户可以在其中输入客户名,之后我想点击搜索按钮。 但是,当我点击按钮时,如何将?where = {“name”:“aaaaa”} 管理为角度内容?我还希望使用该客户的其他列扩展过滤器。

1 个答案:

答案 0 :(得分:1)

这样的事情应该有效(假设一切都在where对象中)

添加一些绑定到范围对象属性的搜索字段。我们称之为search

<label for="search_name">Name</label>
<input type="text" ng-model="search.name" name="name" id="search_name">

<label for="search_city">City</label>
<input type="text" ng-model="search.city" name="city" id="search_city">

然后您可以使用

执行查询操作
CustomersService.query({where: $scope.search}).$promise...

那应该创建一个像

这样的查询参数
?where=%7B%22name%22%3A%22aaaaa%22%2C%22city%22%3A%22London%22%7D

是URI编码值

?where={"name":"aaaaa","city":"London"}