У меня есть несколько флажков:
<input type='checkbox' value="apple" checked>
<input type='checkbox' value="orange">
<input type='checkbox' value="pear" checked>
<input type='checkbox' value="naartjie">
То, что я хотел бы привязать к списку в моем контроллере так, чтобы при каждом изменении флажка контроллер поддерживал список всех проверенных значений, например ['apple', 'pear']
,.
Кажется, что ng-модель может привязать значение только одного флажка к переменной в контроллере.
Есть ли другой способ сделать это, чтобы я мог привязать четыре флажка к списку в контроллере?
javascript
angularjs
nickponline
источник
источник
<input type='checkbox' ng-model="checkboxes.apple">
и т. Д. Модель будет выглядеть следующим образом: {"apple": true, "orange": false, "pear": true, "naartjie": true}naartjie
!? Это просто дает тебе бот! : DОтветы:
Есть два способа решения этой проблемы. Либо используйте простой массив или массив объектов. У каждого решения есть свои плюсы и минусы. Ниже вы найдете один для каждого случая.
С простым массивом в качестве входных данных
HTML может выглядеть так:
И соответствующий код контроллера будет:
Плюсы : простая структура данных и переключение по имени просты в обращении
Минусы : Добавить / удалить обременительно, так как необходимо управлять двумя списками (ввод и выбор)
С массивом объектов в качестве входных данных
HTML может выглядеть так:
И соответствующий код контроллера будет:
Плюсы : добавить / удалить очень легко
Минусы : несколько более сложная структура данных и переключение по имени громоздки или требуют вспомогательного метода
Демо : http://jsbin.com/ImAqUC/1/
источник
value="{{fruit.name}}"
иng-checked="fruit.checked"
излишни, так как используется ng-модель.Простое решение:
http://plnkr.co/edit/U4VD61?p=preview
источник
(color,enabled) in colors
?colors
как это объект, когда вы повторяете его - вы получаете пары(key,value)
.colors
Надо называтьisSelected
, это гораздо легче читать,isSelected[color]
чемcolors[color]
,
источник
Вот небольшая директива многократного использования, которая, кажется, делает то, что вы ищете. Я просто назвал это
checkList
. Он обновляет массив при изменении флажков и обновляет флажки при изменении массива.Вот контроллер и представление, которое показывает, как вы можете использовать его.
(Кнопки демонстрируют, что изменение массива также обновит флажки.)
Наконец, вот пример действующей директивы по Плункеру: http://plnkr.co/edit/3YNLsyoG4PIBW6Kj7dRK?p=preview
источник
value: '@'
наvalue: '=ngValue'
На основе ответов в этой теме я создал директиву checklist-model, которая охватывает все случаи:
Для тематического начального случая это будет:
источник
selectedFruits
.Использование строки
$index
может помочь использовать хэш-карту выбранных значений:Таким образом, объект ng-модели обновляется ключом, представляющим индекс.
Через некоторое время
$scope.someObject
должно выглядеть примерно так:Этот метод не подходит для всех ситуаций, но его легко реализовать.
источник
Поскольку вы приняли ответ, в котором список не использовался, я предполагаю, что ответ на мой вопрос-комментарий «Нет, это не обязательно должен быть список». У меня также создалось впечатление, что, возможно, вы обновляете серверную часть HTML, поскольку в вашем примере HTML присутствует «флажок» (в этом не было бы необходимости, если бы ng-model использовался для моделирования ваших флажков).
В любом случае, вот что я имел в виду, когда задавал вопрос, также предполагая, что вы генерируете серверную часть HTML:
ng-init позволяет сгенерированному на стороне сервера HTML изначально устанавливать определенные флажки.
Скрипки .
источник
Я думаю, что самый простой обходной путь - это использовать «select» с указанием «множественного»:
В противном случае, я думаю, вам придется обработать список, чтобы построить список (с
$watch()
помощью привязки массива модели с флажками).источник
Я адаптировал принятый ответ Йоши, чтобы иметь дело со сложными объектами (вместо строк).
HTML
JavaScript
Рабочий пример: http://jsfiddle.net/tCU8v/
источник
<input type="checkbox">
без упаковки или соответствия<label>
! Теперь ваши пользователи должны нажимать на фактический флажок вместо текста рядом с флажком, что намного сложнее и плохо подходит для использования.Другая простая директива может быть такой:
Контроллер:
И HTML:
Я также включаю Плункер: http://plnkr.co/edit/XnFtyij4ed6RyFwnFN6V?p=preview
источник
Следующее решение кажется хорошим вариантом,
И в модели контроллера значение
fruits
будет такимисточник
Вам не нужно писать весь этот код. AngularJS будет поддерживать синхронизацию модели и флажков, просто используя ngTrueValue и ngFalseValue
Codepen здесь: http://codepen.io/paulbhartzog/pen/kBhzn
Фрагмент кода:
источник
Проверьте эту директиву, которая эффективно управляет списками флажков. Я надеюсь, что это работает для вас. Модель CheckList
источник
Есть способ работать с массивом напрямую и одновременно использовать ng-модель
ng-model-options="{ getterSetter: true }"
.Хитрость заключается в том, чтобы использовать функцию получения / установки в вашей ng-модели. Таким образом, вы можете использовать массив в качестве реальной модели и «подделать» логические значения в модели входа:
CAVEAT Вы не должны использовать этот метод, если ваши массивы большие, как
myGetterSetter
будет вызываться много раз.Подробнее об этом см. Https://docs.angularjs.org/api/ng/directive/ngModelOptions .
источник
Мне нравится ответ Йоши. Я улучшил его, чтобы вы могли использовать одну и ту же функцию для нескольких списков.
http://plnkr.co/edit/KcbtzEyNMA8s1X7Hja8p?p=preview
источник
Если у вас есть несколько флажков в одной форме
Код контроллера
Посмотреть код
источник
Вдохновленный постом Йоши выше. Вот плнкр .
источник
Основано на моем другом посте здесь , я сделал директиву многократного использования.
Проверьте репозиторий GitHub
источник
В HTML (предположим, что флажки находятся в первом столбце каждой строки таблицы).
В
controllers.js
файле:источник
Вот еще одно решение. Преимущество моего решения:
Вот директива:
В конце, тогда просто используйте это так:
И это все, что есть. Единственным дополнением является
checkbox-array-set
атрибут.источник
Вы можете комбинировать AngularJS и jQuery. Например, вам нужно определить массив
$scope.selected = [];
в контроллере.Вы можете получить массив, владеющий выбранными элементами. Используя метод
alert(JSON.stringify($scope.selected))
, вы можете проверить выбранные элементы.источник
источник
Посмотрите это: контрольный список-модель .
Он работает с массивами JavaScript и объектами и может использовать статические флажки HTML без ng-repeat
И сторона JavaScript:
источник
Простой HTML единственный способ сделать это:
источник
Используя этот пример @Umur Kontacı, я думаю использовать с помощью перехвата выбранных данных в другом объекте / массиве, например, на странице редактирования.
Варианты ловли в базе данных
Переключить некоторые опции
Как пример, все цвета JSON приведены ниже:
И 2 типа объекта данных,
array
с одним объектом иobject
содержащие два / более объекта данных:Два выбранных предмета попали в базу данных:
Один выбранный элемент попал в базу данных:
И вот мой код JavaScript:
Мой HTML-код:
[Изменить] Рефакторинг кода ниже:
И вызвать новый метод, как показано ниже:
Это оно!
источник
Я положил массив в контроллере.
На разметке я поставил что-то вроде следующего
Вывод был следующий, в контроллере мне просто нужно было проверить, является ли он истинным или ложным; true для проверенного, отсутствует / false для непроверенного.
Надеюсь это поможет.
источник
Я думаю, что следующий способ более понятен и полезен для вложенных ng-повторов. Проверьте это на Plunker .
Цитата из этой темы :
источник
Вот ссылка на jsFillde для того же, http://jsfiddle.net/techno2mahi/Lfw96ja6/ .
При этом используется директива, которая доступна для скачивания по адресу http://vitalets.github.io/checklist-model/ .
Это хорошо иметь директиву, так как ваше приложение будет нуждаться в этой функции очень часто.
Код ниже:
HTML:
JavaScript
источник
<div>
больше, чем закрывающих</div>
. Вы что-то оставили?Попробуйте моего ребенка:
**
**
Затем для любой ng-модели с флажками она вернет строку всех выбранных вами входных данных:
источник