AngularJS新手,使用MEAN堆栈我正在尝试查询资源,但似乎查询只抓取所有,我无法弄清楚如何提交参数。
例如,一个人可以有很多电话号码,我想查询一个人拥有的所有电话号码。但我无法弄清楚如何传递参数,所以只需拉动系统中的所有电话号码,无论他们属于谁。
我可以用它来绕过它,但有没有办法可以传递像{person:$ stateParams ['personId']}这样的参数来获取与某个人相关的所有电话号码?
$scope.find = function() {
PhoneNumber.query(function(phone_numbers) {
var result = $.grep(phone_numbers, function(e){ return e.person == $stateParams['personId']; });
$scope.phone_numbers = result;
});
};
服务/ phone_number.js
'use strict';
angular.module('mean.phone_numbers').factory('PhoneNumbers', ['$resource',
function($resource) {
return $resource('phone_numbers/:personId', {
personId: '@_id',
}, {
update: {
method: 'PUT'
}
});
}
]);
服务器/路由/ phone_number.js:
module.exports = function(PhoneNumbers, app, auth) {
app.route('/phone_numbers')
.get(phone_numbers.all)
};
服务器/控制器/ phone_number.js:
exports.all = function(req, res) {
PhoneNumber.find().sort('-created').populate('person', 'firstname lastname location').exec(function(err, phone_numbers) {
if (err) {
return res.json(500, {
error: 'Cannot list the phone numbers'
});
}
res.json(phone_numbers);
});
};
答案 0 :(得分:2)
要以 MEAN方式执行此操作,您必须在 API 中创建一条新路线,如下所示:
module.exports = function(PhoneNumbers, app, auth) {
app.route('/phone_numbers').get(phone_numbers.all);
app.route('/phone_numbers/:id').get(phone_numbers.one);
};
然后在您的控制器中定义关联的方法,您只能在查询请求的params
中查询特定的 id :
exports.one = function(req, res) {
PhoneNumber.findById(req.params.id)
.populate('person', 'firstname lastname location')
.exec(function(err, phone_number) {
if (err) {
return res.json(500, { error: 'Cannot find the phone number' });
}
res.json(phone_numbers);
});
};
现在,您可以使用 id
搜索包含您的资源的特定PhoneNumber
$scope.findOne = function (id) {
PhoneNumber.get({ personId: id }, function(phone_number) {
// Do what you want with the result
});
};
答案 1 :(得分:0)
您可以使用for循环遍历列表
PhoneNumber.query(function(phone_numbers) {
var result = [];
angular.forEach(phone_number, function(e) {
if(e.person == $stateParams['personId']) {
result.push(e);
}
});
$scope.phone_numbers = result;
});
或者如果你使用下划线或lodash,你可以做
PhoneNumber.query(function(phone_numbers) {
var result = _.where(phone_numbers, {'person' : $stateParams['personId']});
$scope.phone_numbers = result;
}
答案 2 :(得分:0)
而不是.find()
,添加条件:
.find({ person: req.body.personId })