ng-show 不能与 ng-include 一起使用

Posted

技术标签:

【中文标题】ng-show 不能与 ng-include 一起使用【英文标题】:ng-show not working with ng-include 【发布时间】:2016-05-04 01:10:57 【问题描述】:

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

我有两个文件: -index.html(这使用 ng-include - 不工作) -index_embedded.html(使用相同的代码但不使用包含 - WORKS)

您好,我的问题是当我点击“CLICK ME”,然后点击“CLOSE”,然后再次尝试点击“CLICK ME”时,它不再起作用。

当我使用相同的代码而不使用 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>  

问题是当代码被放置在包含文件中时,它会在点击“CLOSE”后中断。

【问题讨论】:

【参考方案1】:

第一次它从父级继承 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

【讨论】:

对我帮助很大,上帝保佑你的编码技巧【参考方案2】:

我认为问题在于 ng-include 创建了新范围,而 asdf 被该范围的本地版本所遮蔽。

这是众所周知的问题。您可以将变量放在内部结构中(例如将 asdf 更改为 input.asdf 并将输入初始化为 )或(更高级)使用控制器作为构造。

看这里:https://***.com/a/14146317/115198

【讨论】:

【参考方案3】:

这是因为使用 ng-include 在包含文件中创建了新的子范围,而外部范围成为父范围。

所以你应该在 _include.html 中尝试如下方式

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

希望对您有所帮助!

【讨论】:

我的答案的完整副本。 我还没有看到你的回答人...我只是在发布后才看到它!

以上是关于ng-show 不能与 ng-include 一起使用的主要内容,如果未能解决你的问题,请参考以下文章

如何让 ng-include 指令与内容交付网络一起使用?

ng-show和ng-if的区别(从别人博客摘取)

ng-show 在可操作的列中不起作用

AngularJS ng-show 在 colgroup 标签上

检查对象是否为空,使用ng-show但不能使用控制器?

ng-include 与 src 的变量