gpt4 book ai didi

angularjs - 与 ng-if 以 Angular 方式一次性绑定(bind)?

转载 作者:行者123 更新时间:2023-12-03 09:23:41 25 4
gpt4 key购买 nike

如果我有这样的看法:

<div ng-repeat="foo in foos">
<p ng-if="bar">omg lol</p>
<p ng-if="!bar">lol omg</p>
</div>

我实际上是在创建 (2 * foos.length) + 1 $$watchers,这真的不好。我在网上找到了几个来源说你可以做 ng-if="::bar",但是当我这样做时,观察者的数量并没有改变。有没有办法强制 ng-if 成为一次性绑定(bind)?

必须这样做真的非常愚蠢:
<div ng-repeat="foo in foos" ng-if="bar">
<p>omg lol</p>
</div>
<div ng-repeat="foo in foos" ng-if="!bar">
<p>lol omg</p>
</div>

我相信这会给我带来 4 个 $$watchers 之类的东西……所以我正在寻找一种替代方法来避免像那样愚蠢。

最佳答案

只是扩展我的评论来回答。

Angular 1.3 一次性绑定(bind)语法 (::) 确实会删除不必要的监视。只是你需要在设置相关数据后测量 watch 一段时间。这就是为什么。当您在 View 上设置一次性绑定(bind)属性时,angular 将在其上设置一个临时监视,直到它获得定义的值,即除 undefined 之外的任何值。 .这种方法是有原因的——为了支持通过延迟操作(如 ajax 调用、超时、 promise 链解析等)填充的绑定(bind)值。没有这个 ::除了预先填充的绑定(bind)值之外,其他任何东西都不会成功。

因此,只需确保您在某个时间点将某个值设置为一次性绑定(bind)值。不要让它保持未定义。

有条件时说<div ng-if="::lol"></div>重复 100 次。只需确保将值绑定(bind)到转发器或确定 lol 状态的某些操作时即使该操作失败(比如 ajax 调用错误),仍然会为其设置一个值(甚至 null 也是 javascript 中的一个值)。在呈现相应 DOM 绑定(bind)的即将到来的摘要周期之后,将删除监视。

在您的特定 plunker 中,您也可以这样做:

<ul ng-repeat="item in items"  ng-if="::lol">
<li>{{ ::item }}</li>
</ul>

代替
<ul ng-repeat="item in items">
<li ng-if="::lol">{{ ::item }}</li>
</ul>

关于angularjs - 与 ng-if 以 Angular 方式一次性绑定(bind)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30904190/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com