Hier ist die Geige, die das Problem zeigt. http://jsfiddle.net/Erk4V/1/
Wenn ich ein ng-Modell in einem ng-if habe, funktioniert das Modell nicht wie erwartet.
Ich frage mich, ob dies ein Fehler ist oder ob ich die richtige Verwendung falsch verstehe.
<div ng-app >
<div ng-controller="main">
Test A: {{testa}}<br />
Test B: {{testb}}<br />
Test C: {{testc}}<br />
<div>
testa (without ng-if): <input type="checkbox" ng-model="testa" />
</div>
<div ng-if="!testa">
testb (with ng-if): <input type="checkbox" ng-model="testb" />
</div>
<div ng-if="!someothervar">
testc (with ng-if): <input type="checkbox" ng-model="testc" />
</div>
</div>
</div>
controllerAs
.scope:false
und fügte einng-if
Element um die Direktive hinzu - die Bereiche wurden ursprünglich gebunden, aber sie wurden getrennt, nachdem ein Beobachter einen der Bereichswerte aktualisiert hatte ...Antworten:
Die
ng-if
Direktive schafft wie andere Direktiven einen untergeordneten Bereich. Siehe das Skript unten (oder diese jsfiddle )Ihr Kontrollkästchen ändert also das
testb
Innere des untergeordneten Bereichs, nicht jedoch den äußeren übergeordneten Bereich.Beachten Sie, dass Sie, wenn Sie die Daten im übergeordneten Bereich ändern möchten, die internen Eigenschaften eines Objekts wie im letzten von mir hinzugefügten Div ändern müssen.
quelle
$scope.obj = {...}
undng-model="obj.someProperty"
diese Einschränkung zu überwinden.Sie können verwenden
$parent
, um auf das im übergeordneten Bereich definierte Modell wie folgt zu verweisenquelle
ng-model="$parent.$parent.foo
weil ich schon in einem Bereich mit einem binng-repeat
- ist das wirklich der beste Weg?Sie können die Anweisung ngHide (oder ngShow) verwenden . Es wird kein untergeordneter Bereich wie ngIf erstellt.
quelle
ngIf
dann ein untergeordneter Bereich erstellt? Scheint mir sehr seltsam.ng-hide
ändert die HTML-Struktur nicht. Es ändert einfach die CSS-Stile.ng-if
ist komplexer: Es entfernt und fügt HTML-Teile je nach Zustand ein. Es wird ein untergeordneter Bereich zum Speichern des Status erstellt (zumindest sollte ein versteckter HTML-Teil gespeichert werden).Wir hatten dies in vielen anderen Fällen. Wir haben uns intern entschieden, immer einen Wrapper für den Controller / die Direktive zu haben, damit wir nicht darüber nachdenken müssen. Hier ist Ihr Beispiel mit unserem Wrapper.
Hoffe das hilft, Yishay
quelle
Ja, die Anweisung ng-hide (oder ng-show) erstellt keinen untergeordneten Bereich.
Hier ist meine Praxis:
http://jsfiddle.net/bn64Lrzu/
quelle
Sie können es so machen und Ihre Mod-Funktion wird perfekt funktionieren. Lassen Sie mich wissen, wenn Sie einen Codestift wollen
quelle