#javascript #angularjs
#javascript #angularjs
Вопрос:
У меня есть список флажков и значений, которые я загружаю из списка, который возвращается из базы данных.
Контроллер
listA = ['item1','item2'...'itemn']; //Master list of items
$scope.selectedItems = ["item1",... "item5"]; //selected items
$scope.attributesModel = [ //new model based on selected items
{"index":5,"attribute":"item1"},
{"index":10, "attribute":"item2"},
{"index":13, "attribute":"item3"},
{"index":21, "attribute":"item4"},
{"index":24, "attribute":"item5"}
];
Просмотр части 1
<td>
<div class="checkbox checkbox-notext">
<input checklist-model="selectedItems" checklist-value="key" type="checkbox" id="{{key}}" ng-disabled="exceededLimit amp;amp;amp;amp; !checked" />
</div>
</td>
<td>
<label for="{{key}}">{{key}}{{$index}}</label>
</td>
просмотр части 2
<div ng-repeat="(index, row) in attributesModel" >
<div class="margin10">
<div>Index<input ng-model="row.index" value="row.index" type="number" class="indexInputs"></input>{{row.attribute}}</div>
</div>
</div>
Теперь я хотел бы синхронизировать $scope.SelectedItems и $scope.attributesModel. Когда флажок снят, модели SelectedItems и attributesModel удаляют этот элемент, и наоборот. Поэтому каждый раз, когда кто-то устанавливает новый флажок, им предоставляется attributesModel с пустым текстовым полем для ввода значения индекса.
изначально для каждого вновь выбранного элемента, добавляемого в attributesModel, значение ключа индекса равно нулю. Пользователь должен ввести новый индекс # после создания нового элемента.
Я пытался использовать watch, но проблема, с которой я сталкиваюсь, заключается в том, что при выборе нового элемента у меня нет доступа к самому элементу. У меня есть доступ только к списку, не имея ни малейшего представления о том, является ли новый элемент X или удаленный элемент Y, чтобы нажать / удалить нужный элемент.
Так что это может быть решение для просмотра, которого мне не хватает.
Дайте мне знать, если я смогу что-нибудь уточнить.
Комментарии:
1. Прослушиватель $ watch вызывается с 3 аргументами (newValue, oldValue, scope), возможно, вы могли бы сравнить oldValue с newValue, чтобы определить, какой элемент нужно вставить / объединить?
2. @JonathanGawrych Как я могу просмотреть отдельный элемент в списке? Если я просматриваю список, newValue и oldValue — это просто весь список без подсказки о том, какой элемент был удален (если я не повторяю список). Есть ли способ просмотреть отдельный элемент в списке?
Ответ №1:
Я не уверен, в чем проблема, но вы могли бы использовать ngChange
флажки:
<input type="checkbox" ... ng-change="..." />
Я полагаю, у вас есть директива контрольного списка или что-то в этом роде, поэтому вам следует что-то там сделать, но (поскольку вы не делитесь этим с нами) Я не могу сказать, что именно 🙂
Обновить:
Поскольку checklist
директива является внешней зависимостью, вы могли бы обрабатывать ng-chage в своем коде:
<input type="checkbox" ... ng-change="changed(key)" />
/* In the controller: */
...
$scope.changed = function (key) {
if ($scope.selectedItems.indexOf(key) === -1) {
// The checkbox for `key` was unchecked...
} else {
// The checkbox for `key` was checked...
}
};
Комментарии:
1. Я использую директиву контрольного списка отсюда vitalets.github.io/checklist-model
2. @EKet: Я думал, что это была директива yur. Взгляните на мой обновленный ответ.