gpt4 book ai didi

javascript - ng-repeat 键值对象上的自定义过滤器仅更新 View 2 次

转载 作者:行者123 更新时间:2023-11-28 04:38:54 26 4
gpt4 key购买 nike

我创建了一个自定义过滤器来过滤键/值对,例如:

module.controller('tabController', ['$scope', function ($scope) {
var self = this;
self.items = {
"a": "a",
"b": "b",
"c": "c"
}

过滤器:

module.filter('filterKeyValue', function () {

return function (items, input) {
if (!input) return items;
input = input.toLowerCase();

let filtered = {};
let reverse = false;
if (input.startsWith('!')) {
input = input.slice(1).trim();
reverse = true;
}

angular.forEach(items, (value, key) => {
let k = key.toLowerCase();
let v = value.toLowerCase();
let indexOfKey = k.indexOf(input);
let indexOfValue = v.indexOf(input);

if (!reverse) {
if (indexOfKey >= 0 || indexOfValue >= 0) {
filtered[key] = value;
}
} else {
if (indexOfKey < 0 && indexOfValue < 0) {
filtered[key] = value;
}
}
});
console.log('filtered items: ', filtered);
return filtered;
};
});

过滤器工作得很好(总是根据console.log返回正确的过滤项)

问题出在 View 中, View 仅使用过滤后的项目更新两次(由于某种原因总是两次,或者如果“项目”中不存在搜索词则更新第三次)

So i search for:
'a' -> works fine, view gets updated ('a' exists in 'items')
'b' -> works fine, view gets updated ('b' exists in 'items')
'c' -> does not work, the view does not get updated ('c' exists in 'items')
'f' -> does work, view gets updated with no results ('f' does NOT exist in 'items')

我使用以下标记(简短版本):

<div ng-controller="tabController as tab">

<input type="text" ng-model="tab.filter">

<table>
<thead>
<tr>
<th>Key</th>
<th>Value</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="(key,value) in tab.items | filterKeyValue:tab.filter">
<td>{{key}}</td>
<td>{{value}}</td>
</tr>
</tbody>
</table>

</div>

前两次有效,之后就不再有效,这对我来说没有意义。

这里可能出现什么问题?这段代码在 Chrome 扩展 (popup.html) 中运行,但我认为这并不重要。

最佳答案

我找到了解决这个问题的方法:

在我的场景中,这个问题是因为我原型(prototype)化了“对象”而引起的。我没有在过滤器中使用过原型(prototype)。但是仅仅将它放在代码中的某个地方就会导致这个问题......

关于javascript - ng-repeat 键值对象上的自定义过滤器仅更新 View 2 次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43955606/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com