为什么ng-if与我的javascript混淆而ng-show没有?

时间:2018-05-01 14:33:13

标签: javascript angularjs ng-show

我有一个元素(侧边栏),我只想在用户通过身份验证时显示它。这个侧边栏有一些javascript动作,比如扩展/收缩转换器。当我使用ng-show时,它工作正常,但是当我使用ng时 - 如果它只是停止工作。有谁知道它为什么会发生? 我没有渲染问题。问题是一些jquery脚本在使用ng-if时不起作用。我知道ng-if和ng-show之间的区别,其中ng-if创建一个新的DOM,范围和所有,而ng-show只是用CSS隐藏元素。

<div ng-if="sidebar && signedUser" ng-cloak>

    (some components here...)

    <ul class="navbar-nav sidenav-toggler">
      <li class="nav-item">
        <a class="nav-link text-center" id="sidenavToggler">
          <i class="fa fa-fw fa-angle-left"></i>
        </a>
      </li>
    </ul>
</div>

Expanded sidebar (using ng-if the toggler doesn't work)

Using ng-show I can contract it

1 个答案:

答案 0 :(得分:3)

正如其他人在上述评论中所述,

ng-if 将从DOM中删除元素,这意味着您的所有处理程序或附加到这些元素的任何其他内容都将丢失。

ng-show/ng-hide 不会从DOM中删除元素。它在内部使用样式来隐藏/显示元素