AngularJS - Bindung von Optionsfeldern an Modelle mit booleschen Werten
Ich habe ein problem verbindlich, radio-buttons, um ein Objekt, dessen Eigenschaften haben Boolesche Werte. Ich versuche, display prüfungsfragen abgerufen von einem $resource.
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
}]
};
Mit diesem Beispiel-Objekt, die "isUserAnswer: true" - Eigenschaft bewirkt nicht, dass der radio-button ausgewählt werden. Wenn ich Kapseln die boolean-Werte in Anführungszeichen, es funktioniert.
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"
}]
};
Leider mein REST-service behandelt, die Eigenschaft als boolean, und es wird schwierig sein, zu ändern, die JSON-Serialisierung zu Kapseln diese Werte in Anführungszeichen gesetzt werden. Gibt es eine andere Möglichkeit zum einrichten der Modell-Bindung ohne änderung der Struktur des Modelles?
Hier ist das jsFiddle zeigen, dass nicht-arbeiten und Objekte
InformationsquelleAutor der Frage peteallen | 2013-06-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Der richtige Ansatz in Angularjs ist die Verwendung
ng-value
für "nicht-string" - Werte der Modelle.Ändern Sie Ihren code wie folgt:
Ref: Gerade aus dem Maul des Pferdes
InformationsquelleAutor der Antwort kumar_harsh
Dass eine ungerade Ansatz mit
isUserAnswer
. Werden Sie wirklich senden Sie alle drei Entscheidungen an den server zurück, wo es in einer Schleife durch jede Prüfung fürisUserAnswer == true
? Wenn ja, können Sie versuchen, diese:http://jsfiddle.net/hgxjv/4/
HTML:
JavaScript:
Alternativ empfehle ich Ihnen ändern Sie Ihre tack:
http://jsfiddle.net/hgxjv/5/
Diese Weise können Sie senden Sie einfach
{{question1.userChoiceId}}
zurück an den server.InformationsquelleAutor der Antwort Langdon
Hallo hoffe es hilft Ihnen.
InformationsquelleAutor der Antwort Ronel Gonzales
Habe ich versucht eine änderung
value="true"
zung-value="true"
und es scheint zu funktionieren.<input type="radio" name="response2" data-ng-model="choice.isUserAnswer" ng-value="true" />
Auch, um die beiden Eingänge, in Ihrem Beispiel, würden Sie haben, um unterschiedliche Namen für jeden Eingang -- z.B.
response
werden sollteresponse1
undresponse2
.InformationsquelleAutor der Antwort seung
Könnten Sie werfen Sie einen Blick auf diese:
https://github.com/michaelmoussa/ng-boolean-radio/
Dieser Kerl schrieb eine benutzerdefinierte Richtlinie zu umgehen, das Problem, dass "true" und "false" sind Zeichenfolgen, nicht Boolean.
InformationsquelleAutor der Antwort Karen Zilles
Den Weg, Ihre radios sind in den fiddle - sharing-das gleiche Modell - führt dazu, dass nur die Letzte Gruppe zeigen einen geprüften radio, wenn Sie sich entscheiden, zu zitieren, alle truthy-Werte. Eine weitere solide Vorgehen geben die einzelnen Gruppen Ihr eigenes Modell und setzen Sie den Wert als eindeutiges Attribut des radios, wie die id:
Hier ist eine Darstellung der neuen html:
Und ein Turnschuh.
InformationsquelleAutor der Antwort rGil
wenn Sie mit boolean-variable binden Sie die radio-Taste. bitte finden Sie im folgenden Beispiel-code
InformationsquelleAutor der Antwort Sahitya M