EDIT 2 - Zmieniona odpowiedź na podstawie opinii:
Od komentarze, rozumiem, że model obiektowy masz jest zgodnie z poniższymi wytycznymi:
metaItem.fieldOptions =
{0: {optionValue: "Supplier"},
1: {optionValue: "SomethingA"},
2: {optionValue: "SomethingB"}};
i chcesz, aby wybrane wartości do wypełnij obiekt fieldValue
. Tak więc, powiedzmy, dla wybranych klawiszy 0
i 2
następujący komunikat:
issueForView.metaData[subIndex].fieldValue = {0: "Supplier", 2: "SomethingB"};
i problem jest, jeśli odznaczyć 0
, to masz:
issueForView.metaData[subIndex].fieldValue = {0: "", 2: "SomethingB"};
Ale chcesz to:
issueForView.metaData[subIndex].fieldValue = {2: "SomethingB"};
Odpowiedź: To rozwiązuje się łatwo, jeśli przypisano undefined
w ng-false-value
:
<input type="checkbox"
ng-model="issueForView.metaData[subIndex].fieldValue[key]"
ng-true-value="'{{option.optionValue}}'" ng-false-value="undefined">
plunker
====
odpowiedź oryginalny:
Krótko mówiąc, chcesz model przedstawiony w ng-model
być "some string"
jeśli true
i pusty obiekt {}
- jeśli false
, prawda?
Następnie wystarczy ustawić je jako ng-true-value
i ng-false-value
:
<input type="checkbox"
ng-model="foo" ng-true-value="'some string'" ng-false-value="{}">
ją stosować bezpośrednio na przykład
<div ng-repeat="(key,option) in metaItem.fieldOptions">
<input type="checkbox"
ng-model="issueForView.metaData[subIndex].fieldValue[key]"
ng-true-value="'{{option.optionValue}}'"
ng-false-value="{}">
{{option.optionPlaceholder}}
</div>
EDIT:
Jeżeli zamiast "some string"
, chcesz ustawić swój model do obiektu, możesz podać literał hardc obiektu Oded inline:
<input type="checkbox"
ng-model="foo" ng-true-value="{0: 'Supplier'}" ng-false-value="{}">
W przykładzie, w którym ten obiekt jest ustawiony dynamicznie w ciągu iteracji ng-repeat
„s, to lepiej, jeśli masz ten przedmiot dosłowne przygotowane.
Powiedzmy, że dla tej iteracji byłeś (nie wygląda na to, że robisz, ale to byłoby właściwe podejście, ponieważ obiekt jest w rzeczywistości "wartością opcji"), możesz go ustawić tak:
<input type="checkbox"
ng-model="issueForView.metaData[subIndex].fieldValue[key]"
ng-true-value="{{option.optionValue}}" ng-false-value="{}">
Jeśli nie masz to przygotowany i trzeba go zbudować „w locie”, można wykorzystać ng-init
do tego. Powiedzmy, "0"
w Twojej przykład pochodzi z option.optionKey
i "Supplier"
pochodzi z option.optionValue
:
<input type="checkbox"
ng-init="t = {}; t[option.optionKey] = option.optionValue"
ng-model="issueForView.metaData[subIndex].fieldValue[key]"
ng-true-value="{{t}}" ng-false-value="{}">
_ Obiekt jest początkowo pusty_ - który obiekt? Nie potrzebujesz ''{{'. – zeroflagL
co to jest 'ng-true-value' i' ng-false-value'? Powinieneś po prostu używać 'ng-model' – Ronnie
Kiedy mówię, że obiekt jest pusty, mam na myśli' ng-model', 'issueForView.metaData [subIndex] .fieldValue [key]', zaktualizuję to pytanie. –