Вот скрипка, показывающая проблему. http://jsfiddle.net/Erk4V/1/
Появляется, если у меня есть ng-модель внутри ng-if, модель не работает должным образом.
Мне интересно, если это ошибка или я неправильно понимаю правильное использование.
<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
и я добавилng-if
элемент вокруг директивы - области видимости были связаны изначально, но они стали разделенными после того, как наблюдатель обновил одно из значений области действия ...Ответы:
ng-if
Директива, как и другие директивы создает дочернюю сферу. Смотрите скрипт ниже (или этот jsfiddle )Таким образом, ваш флажок изменяет
testb
внутреннюю часть дочерней области, но не внешнюю родительскую область.Обратите внимание, что если вы хотите изменить данные в родительской области, вам нужно изменить внутренние свойства объекта, как в последнем добавленном мной div.
источник
$scope.obj = {...}
иng-model="obj.someProperty"
преодолевает это ограничение.Вы можете использовать
$parent
для ссылки на модель, определенную в родительской области, как этоисточник
ng-model="$parent.$parent.foo
потому что я уже в области сng-repeat
- это действительно лучший способ?Вы можете использовать директиву ngHide (или ngShow) . Он не создает дочернюю область, как это делает ngIf.
источник
ngIf
тогда создается дочерняя область? Кажется очень странным для меняng-hide
не меняет структуру HTML. Это просто меняет стили CSS.ng-if
более сложный: он удаляет и вставляет части HTML в зависимости от состояния. Он создает дочернюю область для сохранения состояния (по крайней мере, он должен хранить скрытую часть HTML).У нас это было во многих других случаях, и мы решили, что внутри всегда должна быть оболочка для контроллера / директивы, чтобы нам не приходилось об этом думать. Вот вам пример с нашей оберткой.
Надеется, что это помогает, Ишай
источник
Да, директива ng-hide (или ng-show) не создает дочернюю область.
Вот моя практика:
http://jsfiddle.net/bn64Lrzu/
источник
Вы можете сделать это так, и ваша мод-функция будет работать идеально, дайте мне знать, если вы хотите кодовое перо
источник