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;
            });
        }
    });
};