#javascript #json #angularjs
#javascript #json #angularjs
Вопрос:
РЕДАКТИРОВАТЬ: мой код действительно работает, я просто был идиотом с несвязанной проблемой. Спасибо всем за ваш вклад.
Итак, у меня есть массив объектов JSON, отформатированных следующим образом:
[{"id":"id1", "text":"text1"}, {"id":"id2", "text":"text2"},....]
Я хочу заполнить поле выбора AngularJS, используя их, с текстовыми полями в качестве отображаемого текста и полями идентификаторов в качестве значений или того, что привязано к модели. Я огляделся, но ни за что на свете не могу понять, что мне нужно делать.
Прямо сейчас у меня есть это для моего выбора, что приводит к отсутствию отображения:
<select name="field" ng-model="npe.formData.field" ng-options="field.id as field.text for field in fields">
Выполнение ng-options таким образом приводит к отображению объектов, но, очевидно, приведет к неправильной привязке значения к модели:
ng-options="field as field.text for field in fields"
Я видел, как люди говорили об использовании «(ключ, значение)», но я не могу понять, как это работает.
Комментарии:
1. Что вы хотите в качестве результата и можете ли вы опубликовать пример того, что не так? Оба ваших
ng-options
примера использования директивы в порядке.2. Ни то, ни другое не работает так, как я бы хотел. Мой первый пример приводит к тому, что в меню ничего не отображается. Мои вторые результаты отображаются правильно, но значение неправильно привязывается к модели (оно присваивает значение всему объекту JSON, а не только идентификатору). Я надеялся, что прояснил это в сообщении. Какие-либо рекомендации по его прояснению?
3. Откуда
dutyOrg
берется? Является ли это частьюfield
?4. Исправлена ошибка при внесении изменений из-за опечатки.
Ответ №1:
Вам понадобится (ключ, значение) в случае, если вы повторяете через карту, что не так — в вашем примере вы повторяете массив объектов. Использование (ключ, значение) будет:
$scope.map={item1:'a',item2:'b'};
...
<li ng-repeat="(id,text) in map">{{id}}) {{text}}</li>
который будет отображать «item1) a» и так далее.
Почему вы упомянули, что приведенный ниже фрагмент не работает?
ng-options="field.id as field.text for field in fields"
Проверьте эту скрипку — http://jsfiddle.net/7eqsc/2 /, это работает как шарм и обновляет модель с правильным идентификатором.
<div ng-app="myApp">
<div ng-controller="myCtrl">
<div ng-repeat="(id,text) in notes">{{text}}</div>
<select ng-model="model.id" ng-options="note.id as note.text for note in notes" ></select>
Selected id:{{model.id}}
</div>
Комментарии:
1. можете ли вы объяснить, в чем смысл note.id как примечание.текст для примечания здесь.. Я новичок в этом
2. конечно, в этом примере я предполагаю, что у вас есть массив «заметок», которые в основном представляют собой простые объекты, содержащие текстовые и идентификационные свойства, например: var note = {text: ‘My note’, id: ‘some-id’}; «note.id как примечание.текст»синтаксис называется «выражением понимания» и может быть действительно запутанным. Что я в основном сделал, так это присвоил значение параметра note.id и надпись на заметку.текст. Вы можете узнать больше об этом в документах ngOptions .
Ответ №2:
Вот пример скрипки, которая работает с базовым контроллером, присваивающим некоторые значения. Хотя у вас нет полного примера кода, я ожидаю, что вы столкнетесь с ng-model
проблемой, с которой вы столкнулись.
function TodoCtrl($scope) {
$scope.fields = [{"id":"id1", "text":"text1"}, {"id":"id2", "text":"text2"}];
$scope.choice = null;
}
И HTML
<div ng-app>
<div ng-controller="TodoCtrl">
<h2>Chosen = {{ choice }}</h2>
<select ng-options="field.id as field.text for field in fields" ng-model="choice"></select>
</div>
</div>
Что вам, вероятно, следует извлечь из этого, так это то, что ng-options
требуется ng-model
для работы, иначе он просто ничего не сделает.
Комментарии:
1. У меня есть ng-model, я просто не публиковал его. Отредактировал OP соответствующим образом, так как мой полный код более или менее идентичен вашему.
2. Я часами искал SO и документы AngularJS, просто пытаясь найти простой пример, подобный вашему, выполняющий ng-повтор для поля выбора. Спасибо!