У меня проблема с привязкой переключателей к объекту, свойства которого имеют логические значения. Я пытаюсь отобразить вопросы экзамена, полученные из ресурса $.
HTML:
<label data-ng-repeat="choice in question.choices">
<input type="radio" name="response" data-ng-model="choice.isUserAnswer" value="true" />
{{choice.text}}
</label>
JS:
$scope.question = {
questionText: "This is a test question.",
choices: [{
id: 1,
text: "Choice 1",
isUserAnswer: false
}, {
id: 2,
text: "Choice 2",
isUserAnswer: true
}, {
id: 3,
text: "Choice 3",
isUserAnswer: false
}]
};
В этом примере объекта свойство isUserAnswer: true не приводит к выбору переключателя. Если я заключаю логические значения в кавычки, это работает.
JS:
$scope.question = {
questionText: "This is a test question.",
choices: [{
id: 1,
text: "Choice 1",
isUserAnswer: "false"
}, {
id: 2,
text: "Choice 2",
isUserAnswer: "true"
}, {
id: 3,
text: "Choice 3",
isUserAnswer: "false"
}]
};
К сожалению, моя служба REST рассматривает это свойство как логическое значение, и будет трудно изменить сериализацию JSON для инкапсуляции этих значений в кавычках. Есть ли другой способ установить привязку модели без изменения структуры моей модели?
angularjs
data-binding
model
radio
peteallen
источник
источник
Это странный подход с
isUserAnswer
. Вы действительно собираетесь отправить все три варианта обратно на сервер, где он будет проверять каждый проверяемыйisUserAnswer == true
? Если это так, вы можете попробовать это:http://jsfiddle.net/hgxjv/4/
HTML:
JavaScript:
В качестве альтернативы, я бы рекомендовал сменить тактику:
http://jsfiddle.net/hgxjv/5/
Таким образом, вы можете просто отправить
{{question1.userChoiceId}}
обратно на сервер.источник
ngChecked
, за исключением того, что вам придется отказаться от использования true / false в качестве строк. Вы можете сделать это? jsfiddle.net/hgxjv/6источник
true
оценивается как правда. Если выng-value
, например, строка, а не ссылка на что-то внутри$scope
, вам придется поместить эту строку в кавычки. Это был случай для меня.Я попытался перейти
value="true"
наng-value="true"
, и это похоже на работу.<input type="radio" name="response2" data-ng-model="choice.isUserAnswer" ng-value="true" />
Кроме того, чтобы оба входа работали в вашем примере, вам нужно было бы дать разные имена каждому входу - например,
response
должен статьresponse1
иresponse2
.источник
Вы могли бы взглянуть на это:
https://github.com/michaelmoussa/ng-boolean-radio/
Этот парень написал пользовательскую директиву, чтобы обойти проблему, что «true» и «false» являются строками, а не логическими значениями.
источник
То, как ваши радиостанции настроены в скрипке - совместно используют одну и ту же модель - заставит только последнюю группу показывать проверенное радио, если вы решите процитировать все истинные значения. Более надежный подход будет предусматривать предоставление отдельным группам их собственной модели и задание значения в качестве уникального атрибута радиостанций, например id:
Вот представление нового HTML:
И скрипка.
источник
если вы используете логическую переменную для привязки переключателя. пожалуйста, обратитесь ниже пример кода
источник