无法从Angularjs控制器更新数组中的给定项

无法从Angularjs控制器更新数组中的给定项,angularjs,angularjs-scope,angularjs-ng-repeat,angularjs-ng-options,Angularjs,Angularjs Scope,Angularjs Ng Repeat,Angularjs Ng Options,我需要创建一个参数搜索查询并将其发送到服务器。我已经创建了用户将从中填充值的下拉列表。以下是UI上的代码: <div ng-repeat="criteria in criterias"> <div class="m-b"> <div class="form-group s-b" style="width: 150px;"> &

我需要创建一个参数搜索查询并将其发送到服务器。我已经创建了用户将从中填充值的下拉列表。以下是UI上的代码:

              <div ng-repeat="criteria in criterias">
                <div class="m-b">
                  <div class="form-group s-b" style="width: 150px;">
                    <span>classification</span>
                    <select  ng-model="criteria.selectedClassification" class="form-control" id="classification" ng-options="classification for classification in classification" ng-change="handleClassification(criteria)" style="max-width:100%"></select>
                  </div>
                  <div class="form-group s-b" style="width: 150px;">
                    <span>Config</span>
                    <select id="config" ng-model="criteria.selectedConfig" ng-options="config for config in config" class="form-control" ng-change="handleConfig(criteria)" style="max-width:100%" ></select>
                  </div>
                  <div class="form-group s-b" style="width: 150px;">
                    <span>Attribute</span>
                    <select id="attribute" class="form-control" ng-options="attribute for attribute in attributes"  ng-model="criteria.selectedAttribute" style="max-width:100%;" ng-change="handleAttrChange(criteria  )"></select>
                  </div>
                  <div class="form-group s-b" style="width: 150px;">
                    <span>Predicate</span>
                    <select class="form-control" ng-model="criteria.predicate"  style="max-width:100%">
                      <option value="matches">Matches</option>
                      <option value="not-matches">Not Matches</option>
                    </select>
                  </div>
                  <div class="form-group s-b" style="width: 100px;">
                    <span>Value</span>
                    <select class="form-control" name="account" ng-model="criteria.value" ng-options="item for item in values" style="max-width:100%">
                    </select>
                  </div>
                  <div class="form-group s-b" style="margin-top: 20px;">
                    <span>
                    <button class="btn btn-sm btn-primary pad-btn" type="submit" ng-click="addCriteria()"><i class="fa fa-plus"></i>
                    </button>
                    <button class="btn btn-sm btn-danger pad-btn" type="submit" ng-click="deleteCriteria(criteria)"><i
                            class="fa fa-minus"></i></button>
                    </span>
                  </div>
                </div>
              </div>

分类
配置
属性
谓语
比赛
不匹配
价值
我将代码包装在一个repeat中,这样用户就可以创建多个条件(每个条件都有一个过滤条件)。用户可以通过单击
+
图标来创建标准。我在使用一个标准时遇到了问题,在配置上进行的任何更新都会设置所有标准的属性,而不是当前标准

我已经创建了一个工作plunker来演示这个。请告诉我哪里出了问题


链接到Plunker-

问题是您的属性列表。 无论何时更改配置,都会调用一个正在更改属性列表的函数。每一行条件都在查看相同的属性数组。因此,如果更改第一行和第三行中的配置,它们都会影响属性的设置,因此会对数组进行两次过滤


为了避免这种情况,您的每一行都应该有一个要进行筛选的查找数组。然后在ng change的函数中,过滤当前条件中的数组,以便每一行条件都使用自己的查找。

感谢您的关注。为了我的利益,请你发布编辑或更新plunker。Np,当然可以。因此,我所做的是将ng options=“attribute for attributes in attributes”更改为ng options=“attribute for attributes in attributes”,然后在控制器中,我向标准添加了另一个属性,称为attributes。我将其设置为$scope.attributes,并在推送新的criteria对象时设置属性。我还获取了设置查找的代码,并将其包装到函数中,然后设置初始条件,以便正确加载属性。谢谢这真的很有帮助,因为
ng选项对我来说非常混乱。另一个问题是配置数组的列表。对于所有条件,配置数组都是相同的,即使我们更改了分类。配置数组需要根据所选分类进行更新。我在这个问题上哪里做错了。你必须做与属性相同的事情。将查找作为每个对象的一部分,并对其进行筛选。保持$scope.configs始终不变,因为它是所有选项的真实来源。还要确保您使用的是angular.copy(),这样它就不会引用相同的对象了。如果您可以更新plunkr,那就太好了,因为我需要知道如何处理
angular.copy
来更新本地副本而不是主副本,这样我就可以在有类似用例的应用程序中更新其他代码。