2015-02-25 16 views
5

Jeśli mam wyboru w kątowa takiego:angularjs ng-fałszywie wartość ustawiona na nic

<div ng-repeat="(key,option) in metaItem.fieldOptions"> 
    <input type="checkbox" 
      name="metaField[]" 
      ng-model="issueForView.metaData[subIndex].fieldValue[key]" 
      ng-true-value="'{{option.optionValue}}'" 
      ng-false-value="'{{null}}'">  
      {{option.optionPlaceholder}} 
</div> 

Więc ng-model, issueForView.metaData[subIndex].fieldValue[key] jest początkowo pusta, jej tak:

{} 

Say I kliknij opcję dostawcy, otrzymuję to:

{"0":"Supplier"} 

Następnie Gdybym odznaczyć, otrzymuję to:

{"0":""} 

Co chcę na Odznacz to:

{} 

to, aby utrzymać go z kodem inline ja zastępującego. Jakieś sugestie?

+1

_ Obiekt jest początkowo pusty_ - który obiekt? Nie potrzebujesz ''{{'. – zeroflagL

+0

co to jest 'ng-true-value' i' ng-false-value'? Powinieneś po prostu używać 'ng-model' – Ronnie

+0

Kiedy mówię, że obiekt jest pusty, mam na myśli' ng-model', 'issueForView.metaData [subIndex] .fieldValue [key]', zaktualizuję to pytanie. –

Odpowiedz

4

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="{}">  
+0

Więc jeśli wybiorę dostawcę, 'ng-model' =' {"0": "Dostawca"} ', następnie kliknij, przy pomocy tej techniki otrzymam' ng-model' = '{" 0 ": {}}' . To, czego chcę, gdy kliknę, to 'ng-model' =' {} '. –

+0

Obecnie usuwam puste/fałszywe wartości z kontrolera, ale byłoby miło, gdyby to wszystko zostało do tego czasu ustalone. –

+0

@Octopi, skąd pochodzi ten obiekt '{0:" Dostawca "}? W każdym razie - edytowałem pytanie za pomocą odmiany, ale proszę, następnym razem podaj tego rodzaju istotne informacje w pytaniu –

0

Wystarczy dodać tag required. Wartość klucza nie pojawi się w obiekcie formularza, chyba że jest poprawna.

<div ng-repeat="(key,option) in metaItem.fieldOptions"> 
    <input type="checkbox" 
      name="metaField[]" 
      required="" 
      ng-model="issueForView.metaData[subIndex].fieldValue[key]" 
      ng-true-value="'{{option.optionValue}}'" 
      ng-false-value="'{{null}}'">  
      {{option.optionPlaceholder}} 
</div> 
Powiązane problemy