Javascript ng change正在监视ng repeat中的所有项目,而不是一个项目
我有这个模板:Javascript ng change正在监视ng repeat中的所有项目,而不是一个项目,javascript,angularjs,angularjs-ng-repeat,Javascript,Angularjs,Angularjs Ng Repeat,我有这个模板: <div class=characteristics-list> <input ng-model="search" ng-change="onSearchChange(search)"> <div ng-repeat="policy in item.policies" ng-include="'policy.html'"></div> </div> 更改搜索值的结果显示在所附图片上 当输入值更改时,函
<div class=characteristics-list>
<input ng-model="search" ng-change="onSearchChange(search)">
<div ng-repeat="policy in item.policies" ng-include="'policy.html'"></div>
</div>
更改搜索值的结果显示在所附图片上
当输入值更改时,函数将启动,但它将在ng repeat中的每个项目中进行搜索。如何仅处理一个当前项目而不影响ng repeat中的所有其他项目?
这意味着,当我更改一个项目中的搜索值时,它不应该处理其他项目。
我试图动态地创建独特的ng模型,但没有帮助。
AngularJS版本是1.2.27我不明白你想达到什么目的。你的代码应该做什么?你能在policy.html中提供代码吗?你的标题也有误导性:ng change没有监视所有项目。您的
onSearchChange
函数正在您的$scope.item.policies
数组中循环。正如@guillaumegorges所说,它在这里不做任何ng change
操作ng change
响应search
输入元素中的更改,并调用onsearch change
。是您的onSearchChange
函数在整个数组中循环。现在还不清楚你希望它做什么;你说“只处理一个当前项目”,但那是什么项目?很难从你发布的屏幕截图中判断你的问题是什么,因为你正在更改的输入框不是你发布代码的搜索输入。这似乎出现在policy.html代码中。你不应该发布截图,而应该提供一个。再看一次,你发布的代码实际上似乎被包装在一个不同的ng repeat
中。从目前为止你提供的作品中,仍然很难看出你想要完成什么。
$scope.onSearchChange = function (originalValue) {
var value = originalValue.toLowerCase();
if (!value) {
$scope.item.policies.forEach(function (policy) {
policy.isCollapsed = true;
policy.isHidden = false;
policy.items.forEach(function (item) {
item.isHidden = false;
});
});
return;
}
$scope.item.policies.forEach(function (policy) {
var isValueInPolicyName = policy.name.toLowerCase().includes(value);
var visibleItems = policy.items.filter(function (item) {
var isValueInDescription = item.description.toLowerCase().includes(value);
item.isHidden = !isValueInDescription;
return isValueInDescription;
});
policy.isHidden = !isValueInPolicyName && !visibleItems.length;
if (!isValueInPolicyName && !!visibleItems.length) {
policy.isCollapsed = false;
}
if (isValueInPolicyName && !visibleItems.length) {
policy.items.forEach(function (item) {
item.isHidden = false;
});
}
});
};