【发布时间】:2015-06-17 23:33:36
【问题描述】:
如果我有这样的看法:
<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 成为一次性绑定?
不得不这样做真的很愚蠢:
<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 之类的东西......所以我正在寻找一种替代方法,以避免不得不像那样愚蠢。
【问题讨论】:
-
:: 是一次性绑定。只是它最初会创建一个临时监视,然后在将值分配给绑定属性后将其删除。你有证据吗?
-
是的,这是一个 plunker,显示在 dom 渲染 2 秒后,$$watcher 计数为 2000,仅来自 ng-if...plnkr.co/edit/JgP3lRyuSoSPQNIgR8Ri?p=preview
-
我看到的是
<li ng-if="::lol">{{ ::item }}</li>观察者计数 ==> 2 without prefixinglolwith::it is 1002。你说什么? -
完全糊涂了……什么?所以你是说在浏览器超时后弹出警报窗口显示 2 个观察者?
-
我很抱歉,我以为我用 ::lol 保存了版本,而不仅仅是 lol。好吧,这很奇怪,因为这不是我在应用程序中遇到的行为,我的 ng-if 中的 :: 前缀完全没有做任何事情,而我的观察者人数有数千人,所以我认为我需要进一步调查。
标签: angularjs