【发布时间】:2016-06-02 13:57:29
【问题描述】:
我正在尝试解决自定义过滤器的问题。我已经配置了jsFiddle to replicate the issue。
Out of Stock 过滤器是具有奇怪行为的自定义过滤器。最初它工作正常。但是,如果您在搜索框中输入文本,请从搜索框中删除文本,然后再次尝试使用“缺货”过滤器,它不会返回任何结果。
我被难住了。我认为这可能与过滤器逻辑在控制器中的工作方式有关,但我不明白为什么在将文本输入搜索后它没有读取项目数量值。
这是“缺货”过滤器的自定义过滤器逻辑:
$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;
}
};
下面是过滤器函数的调用方式
<div class="checkbox">
<input type="checkbox" name="filter" ng-model="searchInventory.inventory" data-ng-true-value="0" data-ng-false-value="''" ng-change="changeStockFilter()">
Out of Stock
</div>
这就是将过滤器应用于 ngrepeat 的方式
<div ng-repeat="item in inventory | filter: searchInventory : exactMatching | orderBy:sortOrder as filtered_result track by $index">
我还认为过滤器中的“track by”可能存在问题,假设我使用不正确。我阅读了下面链接的几页,我认为这不是问题所在。当然,我可能是错的。
- angular docs ngrepeat
- apply track by index and filter for ng
- ng-repeat-with-filter-and-track-by-index-not-working
我希望能提供有关此问题的任何指导。谢谢!!!
【问题讨论】:
-
除非您通过单击“x”(仅限 IE)清除搜索输入,否则它似乎可以正常工作。对吗?
标签: javascript angularjs filter