У меня есть требование создать поисковый запрос параметров и отправить его на сервер. Я создал выпадающие списки, из которых пользователь будет заполнять значения. Ниже приведен код в пользовательском интерфейсе:
<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>
Я завернул код внутри повтора, чтобы пользователь мог создать несколько критериев (каждый из которых имеет одно условие фильтра). Пользователь может создать критерии, щелкнув значок +
. Я сталкиваюсь с проблемами при работе с одним критерием, любое обновление, сделанное в config, устанавливает атрибуты всех criteia вместо текущих критериев.
Я создал рабочий плункер для демонстрации этого. Пожалуйста, дайте мне знать, где я ошибаюсь.
Ссылка на Plunker - Ссылка на Plunker
Проблема заключается в вашем списке атрибутов. Всякий раз, когда вы меняете конфигурацию, вы вызываете функцию, которая меняет список атрибутов. Каждая строка критериев рассматривает один и тот же массив атрибутов. Поэтому, если вы измените конфигурацию в первой и третьей строках, они влияют на то, какие атрибуты установлены, поэтому она дважды фильтрует массив.
Чтобы этого избежать, каждая из ваших строк должна иметь массив поисковых запросов, которые вы собираетесь фильтровать. Затем внутри функции ng-изменения отфильтруйте массив, который находится в ваших текущих критериях, так что каждая строка критериев использует его собственный поиск.