要获得演示,请在此处查看jsfiddle,然后点击Out of Stock
复选框。
它应该只显示数量为0的库存,但它也会提取30的数量。我认为这是因为它与字符串值匹配。
我认为问题在于:
ng-true-value='0'
解决此问题的最佳方法是什么?请问您能提供代码示例吗?
答案 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">
答案 2 :(得分:1)
使严格的价值动态:
<div ng-repeat="item in inventory | filter: searchInventory:!!searchInventory.qty | orderBy:sortOrder">
注意:如果你有多个相似的标准,这可能会变得混乱
答案 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">