ng-show не работает с ng-include

http://plnkr.co/edit/0CAgXsX847n9LfIG4Fzj?p=preview

У меня есть два файла: -index.html (использует ng-include - НЕ РАБОТАЕТ) -index_embedded.html (использует тот же код, но без включения - РАБОТАЕТ)

Привет, моя проблема в том, что когда я нажимаю «НАЖМИТЕ НА МЕНЯ», затем нажимаю «ЗАКРЫТЬ», затем снова пытаюсь нажать «НАЖМИТЕ НА МЕНЯ», это больше не работает.

Когда я использую тот же код без использования ng-include, я могу нажать «CLICK ME», «CLOSE», а затем снова «CLICK ME».

Почему это не работает только тогда, когда код находится во включаемом файле?

<h2 ng-click="asdf = !asdf">CLICK ME</h2>

<!-- <div ng-include="'partials/audiencenav.html'"></div> -->
<!-- extracted code from the include and pasted below, i'm able to successfully  CLICK, CLOSE, and CLICK again -->
<div class="" ng-show="asdf">
    <div ng-click="asdf = !asdf"><h2>CLOSE</h2></div>   
</div>  

Проблема в том, что когда код используется, помещенный во включаемый файл, он ломается после нажатия «ЗАКРЫТЬ».


person coderaging    schedule 27.01.2016    source источник


Ответы (3)


В первый раз он наследует значение asdf от родителя, пока вы не нажмете кнопку «Закрыть», после того как вы нажали CLOSE, он создает asdf с локальная область, на которую больше не влияет нажатие CLICK ME, поэтому вы можете использовать $parent.asdf во включаемом файле, который всегда будет ссылаться на родителя.

Пожалуйста, смотрите обновленный плункер

<div class="" ng-show="$parent.asdf">
    <div ng-click="$parent.asdf = !$parent.asdf"><h2>CLOSE</h2></div>   
 </div>

http://plnkr.co/edit/9wmKTR8HPw54K95XqapA?p=preview

person Sardesh Sharma    schedule 27.01.2016
comment
Это мне очень помогло, благослови господь ваши навыки программирования - person vivex; 27.01.2016

Я думаю, проблема в том, что ng-include создает новую область, а asdf затеняется локальной версией этой области.

Это хорошо известная проблема. Вы можете поместить переменные во внутреннюю структуру (например, изменить asdf на input.asdf и инициализировать ввод {}) или (более сложно) использовать контроллер в качестве конструкции.

посмотрите здесь: https://stackoverflow.com/a/14146317/115198

person eran    schedule 27.01.2016

Это связано с тем, что с помощью ng-include во включенном файле создается новая дочерняя область, а внешняя область становится родительской.

Поэтому вы должны попробовать, как показано ниже в _include.html

<div class="" ng-show="$parent.asdf">
    <div ng-click="$parent.asdf = !$parent.asdf"><h2>CLOSE</h2></div>   
</div>

Надеюсь, поможет!

person vamshi krishna kurella    schedule 27.01.2016
comment
Полная копия моего ответа. - person Sardesh Sharma; 27.01.2016
comment
Я не видел твоего ответа, чувак... Я увидел его только после того, как опубликовал! - person vamshi krishna kurella; 27.01.2016