带参数的AngularJS查询资源

时间:2014-10-25 02:47:47

标签: javascript jquery angularjs mean-stack

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);

  });
};

3 个答案:

答案 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 })