【问题标题】:Trying to get a better understanding of ng-if试图更好地理解 ng-if
【发布时间】:2015-11-29 15:12:18
【问题描述】:

如果你看看我下面的小代码 sn-p,我想要做的应该很明显......不是每条记录都有 this 字段,等等我不想隐藏它和标签。我这里的东西没有用。

        <table id="tablepress-1" class="tablepress tablepress-id-1" ng-repeat="agent in vm.agents | orderBy: 'id'" border="0">
        <tbody class="row-hover">
            <tr class="row-1 odd">
                <td class="column-1"><a href="http://larosacre.com/?page_id=1121"><img src="images\{{agent.image}}" alt="" class="aligncenter size-thumbnail wp-image-1116" data-recalc-dims="1" /></a></td>
                <td class="column-2">
                    {{agent.name}}<br />
                    Phone: {{agent.phone}}<br />
                    <p ng-if="{{agent.email}} != ''">E-Mail: {{agent.email}}</p><br />
                    {{agent.bio}}
                </td>
            </tr>
        </tbody>
    </table>

我应该如何处理这个问题?

谢谢,

新手

【问题讨论】:

  • 如果您只是隐藏部分 UI,您可以使用 ngShow/ngHide。在这种情况下使用ngIf 成本太高,因为只要ngIf 表达式结果为真或假,它就会重新附加并删除DOM。使用ngIf 的另一个警告是它创建了一个子作用域,您已经在使用ng-repeat 创建一个子作用域,因此创建更多作用域的成本加倍。

标签: angularjs angular-ng-if


【解决方案1】:

赋予 ngIf 指令的内容将通过在当前范围内进行评估来解释。也就是说,您确实不需要(实际上,您不必)在此处使用{{...}} 标记。

也就是说,只需使用:

<p ng-if="agent.email != ''">E-Mail: {{agent.email}}</p>

...会创造奇迹。虽然,因为,当agent.email != '' 时,基本上,agent.email 是 truth-y,如果它是 @987654327,则仅在 布尔上下文 中评估为 false @ 或空(或 0,但我相信这不会发生在你的情况下)。

我想说的是,只需使用:

<p ng-if="agent.email">E-Mail: {{agent.email}}</p>

...你可以开始了!

【讨论】:

  • @LakmalCaldera 嗯,当您简单地使用 ng-if={{agent.email}} 时,它确实不。请参阅此 JSFiddle 以供参考:jsfiddle.net/ha5jyzws
猜你喜欢
  • 2016-01-20
  • 1970-01-01
  • 2018-07-05
  • 2011-12-29
  • 1970-01-01
  • 1970-01-01
  • 2012-01-14
  • 2020-12-19
  • 1970-01-01
相关资源
最近更新 更多