ng-true-value ='0'拾取错误的值

时间:2016-05-28 17:37:40

标签: javascript html angularjs checkbox

要获得演示,请在此处查看jsfiddle,然后点击Out of Stock复选框。

它应该只显示数量为0的库存,但它也会提取30的数量。我认为这是因为它与字符串值匹配。

我认为问题在于:

ng-true-value='0'

解决此问题的最佳方法是什么?请问您能提供代码示例吗?

4 个答案:

答案 0 :(得分:1)

filter docs你需要为严格的比较添加额外的参数(比较器)

尝试更改:

<div ng-repeat="item in inventory | filter: searchInventory | orderBy:sortOrder">

<div ng-repeat="item in inventory | filter: searchInventory:true | orderBy:sortOrder">

答案 1 :(得分:1)

由于filter也会返回部分匹配的数据,因此当您与数量0进行比较时,还会与30匹配,因为它还包含0

您可以在过滤器中使用true使用完全匹配,例如:filter: searchInventory: true

可以通过某些棘手的方式仅针对qty激活完全匹配。如果使用true作为完全匹配,并且在使用false时不完全匹配,请仅使用true进行&#39; qty = 0&#39;。

可以尝试:

在控制器中添加另一个函数和变量

$scope.exactMatching = false; // initially set false

  $scope.changeStockFilter = function() { // this function call on change checkbox value
    if($scope.searchInventory.qty === '0') {
        $scope.exactMatching = true; // if qty 0 then set true
    } else {
       $scope.exactMatching = false;
    }
  };

并在html中:

<div class="checkbox">
    <input type="checkbox" data-ng-model='searchInventory.qty' data-ng-true-value="'0'" data-ng-false-value='' ng-change="changeStockFilter()"> Out of Stock
</div>

 <div ng-repeat="item in inventory | filter: searchInventory : exactMatching | orderBy:sortOrder"> 

PLUNKER DEMO LINK

答案 2 :(得分:1)

使严格的价值动态:

<div ng-repeat="item in inventory | filter: searchInventory:!!searchInventory.qty | orderBy:sortOrder">

注意:如果你有多个相似的标准,这可能会变得混乱

http://jsfiddle.net/wYfs4/648/

答案 3 :(得分:0)

这很难看,但确实有效:

<input type="checkbox" data-ng-model='searchInventory.qty' data-ng-true-value="0" data-ng-false-value='!0||0'> Out of Stock
<input type="checkbox" data-ng-model='searchInventory.status' data-ng-true-value='inactive' data-ng-false-value='!inactive || inactive'> Inactive

<div ng-repeat="item in inventory | filter: searchInventory:true | orderBy:sortOrder">