对于我的应用程序,我为地址创建了一个服务,它允许我为任何给定用户操作地址对象。除了我的标准 CRUD 函数之外,我还需要有一个函数来列出指定 Parse.User 的任何地址。
服务.js
.factory('Address',['$http', 'PARSE_CREDENTIALS', function ($http,PARSE_CREDENTIALS) {
return {
// constrain to User ID
getAll: function(userId) {
return $http.get('https://api.parse.com/1/classes/Address', {
headers: {
'X-Parse-Application-Id': PARSE_CREDENTIALS.APP_ID,
'X-Parse-REST-API-Key': PARSE_CREDENTIALS.REST_API_KEY,
'Content-Type' : 'application/json'
},
params: { "userId": userId }
});
},
// ...get(), edit(), add(), delete()
控制器.js
.controller('AddrCtrl', ['$scope', '$state', '$stateParams', '$rootScope', 'Address',
function($scope, $state, $stateParams, $rootScope, Address) {
Address.getAll($rootScope.user.id)
.success( function(data) {
console.log(data);
$scope.addresses = data.results;
})
}]);
在我的 Angular 模板中,视图确实返回地址对象。但是当它应该只返回具有相应 userID 的地址对象时,它会返回所有 Address 对象。为了澄清,Address 类有一个 userId 指针列。每个地址只有一个用户。
以下是AddrCtrl
在控制台中返回的日志消息:
Object {results: Array[2]}
results: Array[2]
0: Object
firstName: "(test)"
lastName: "test"
// more unrelated properties
objectId: "yUEuFjLlzs"
updatedAt: "2014-12-02T20:17:55.608Z"
userId: Object
__type: "Pointer"
className: "_User"
objectId: "q1KADkp4i1"
我假设问题出在我的 $http.get(( 函数中的某个地方。最终,我的问题是:为什么我的params
选项不将我的data.results
限制为仅与一个 Parse.User 关联的地址对象?
我不在寻找的答案:
返回所有地址对象,并且仅将与 Parse.User.current((.id 匹配的对象保存到$scope中。
您需要使用 where
子句来执行查询。
如果userId
的数据类型为 Pointer
,则应编写如下:
{"where": JSON.stringify({
"userId": {"__type":"Pointer","className":"_User","objectId":"userId"}}
)}