Restangular:如果为空则不传递参数

时间:2015-05-25 15:04:34

标签: javascript angularjs parameters restangular

我使用RestAngular在AngularJS应用程序中使用以下控制器方法:

    $scope.findFriend = function (name, type, limit) {
        return FriendSearch.getList({
            name: name,
            type: type,
            limit: limit
        });
    };

可能类型 为空(没有内容的字符串,长度= 0) - Restangular会生成以下无效网址:

http://host:port/rest/friends/search?limit=10&name=Peter&type=

正确就是省略它:

http://host:port/rest/friends/search?limit=10&name=Peter

当然,我可以在传递之前检查参数。但我想知道是否有更好的方法可以做到这一点。

1 个答案:

答案 0 :(得分:0)

不幸的是我无法使用Restangular 1.4版重现此问题。我创造了一个类似于你的例子的小提琴:

http://plnkr.co/edit/ovwd8wUhBkhPXtBNDfbw?p=preview

摘录:

  // http://run.plnkr.co/search?name=foo
  $scope.findFriend('foo');
  // http://run.plnkr.co/search?name=foo&type=bar
  $scope.findFriend('foo', 'bar');
  // http://run.plnkr.co/search?limit=3&name=foo
  $scope.findFriend('foo', null, '3');
    // http://run.plnkr.co/search?limit=3&name=foo
  $scope.findFriend('foo', undefined, '3');

作为参数给出的nullundefined都按预期工作。 这意味着我们需要更多信息/代码,因为行为可能是由其他原因造成的。

对于空字符串的情况,最简洁和简单的方法是简单地检查''并替换为null。

我相应更新了小提琴:

  $scope.findFriend = function (name, type, limit) {
    return FriendSearch.getList({
      name: name === '' ? null : name,
      type: type === '' ? null : type,
      limit: limit === '' ? null : limit
    });
  };
  // http://run.plnkr.co/search?limit=3&name=foo
  $scope.findFriend('foo', '', '3');