在Angular中使用ng-if进行一次性绑定?
在Angular中使用ng-if进行一次性绑定?
如果我有一个视图执行:
omg lol
lol omg
实际上我会创建 (2 * foos.length) + 1 个 $$watchers,这确实不好。我发现在线上有许多来源都说你可以使用 ng-if=\"::bar\",但是当我这样做时,监控器的数量并没有改变。有没有一种方法可以强制 ng-if 成为一次性绑定?
必须这样做实在是太傻了:
omg lol
lol omg
这会给我带来大约4个监控器...所以我正在寻找一种替代方案,避免像这样变得可笑。
admin 更改状态以发布 2023年5月24日
我在这里回答您的评论。
Angular 1.3的一次性绑定语法(::
)确实会删除不必要的监视。只是需要在您设置相关数据一段时间后测量监视时间。原因在于,当您在视图上设置一次性绑定属性时,Angular会在其上设置一个临时监视器,直到它得到一个定义的值,即除了undefined
之外的任何值。这种方法出于一个原因而存在——为了支持通过延迟操作(例如ajax调用、超时、承诺链分辨率等)填充的绑定值。如果没有这个::
,它将无法成功地在除了预填充绑定值之外的任何东西上工作。
因此,请确保您在某个时间点为一次性绑定的值设置了一些值。不要让它保持未定义。
比如当您有一个重复出现100次的条件时。确保当您将值绑定到重复器或某个确定
lol
状态的操作时,即使这个操作失败了(比如ajax调用错误),也要为其设置一个值(甚至null
也是JavaScript中的一个值)。监视器将在即将到来的摘要周期后被删除,这会渲染相应的DOM绑定。
在您特定的Plunker中,您可以这样做:
- {{ ::item }}
而不是
- {{ ::item }}