【问题标题】:Angular $filter is filtering negative numbers even though the filter is a positive number即使过滤器是正数,Angular $filter 也会过滤负数
【发布时间】:2018-11-12 23:11:44
【问题描述】:

我有一个简单的数组过滤器。数组中的每个项目都有一个“评级”属性,它是一个数字。值可以是 -3,-2,-1,1,2,3。

如果我这样做了

$scope.ratingFilter = -3; // negative numbers work fine

如果我这样做了

$scope.ratingFilter = 3; // positive numbers are showing items that have a Rating of 3 AND -3. Why are negative number appearing in the filter???

$scope.updateMarkers = function(){

    var filters = [];
    if($scope.ratingFilter != 'all'){
        filters.Rating = $scope.ratingFilter;
    }

    var arr = [];
    angular.forEach($scope.allMarkers, function(value, key){
        arr.push(value);
    });

    $scope.markers = $filter('filter')(arr, filters);
}

【问题讨论】:

  • 不是字符串过滤器吗?
  • @FrankModica 嗯,我不确定你的意思。 arr 数组中的 Rating 属性是数字而不是字符串。我会检查 $scope.ratingFilter 是什么,但我确定它是一个数字。
  • 我的意思是 AngularJS 提供的过滤器 - 它可能返回包含 3 的任何内容。尝试添加另一个包含 3 的数字,看看它是否也返回。
  • @FrankModica console.log(angular.isString($scope.ratingFilter)); 返回 false 所以它是一个数字。
  • @FrankModica 好的...我刚刚做了 $scope.ratingFilter = 43;并且返回 0 结果,因此它不是部分匹配。奇怪的是 -1,-2,-3 都有效,你会认为如果它是任何带有 3 的数字,它也会返回所有正的 3。很奇怪。

标签: angularjs filter negative-number


【解决方案1】:

考虑自己在控制器中使用纯 JavaScript 过滤数组:

$scope.markers = arr.filter(x => x.Rating === ratingFilter);

【讨论】:

  • 谢谢弗兰克,请参阅下面的回答。为我解决了这个问题。
  • @JamieBarker 不客气。但我很好奇,既然可以用标准 JS 完成,为什么还要为此引入 AngularJS?
  • 哟弗兰克,这是一个相当庞大的应用程序。到目前为止已经开发了 2 年以上。
  • 明白了,有道理
【解决方案2】:

$filter 中将“严格”值设置为true

$filter('filter')(arr, filters, true);

https://docs.angularjs.org/api/ng/filter/filter

【讨论】:

    【解决方案3】:

    $scope.dsset = $filter('filter')($scope.array, { id: 1});

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-14
      • 2011-02-04
      • 1970-01-01
      • 2017-07-16
      • 1970-01-01
      • 1970-01-01
      • 2022-01-07
      • 1970-01-01
      相关资源
      最近更新 更多