在Angular中使用ng-if进行一次性绑定?

13 浏览
0 Comments

在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日
0
0 Comments

您需要使用Bindeonce来完成此操作:https://github.com/Pasvaz/bindonce

0
0 Comments

我在这里回答您的评论。

Angular 1.3的一次性绑定语法(::)确实会删除不必要的监视。只是需要在您设置相关数据一段时间后测量监视时间。原因在于,当您在视图上设置一次性绑定属性时,Angular会在其上设置一个临时监视器,直到它得到一个定义的值,即除了undefined之外的任何值。这种方法出于一个原因而存在——为了支持通过延迟操作(例如ajax调用、超时、承诺链分辨率等)填充的绑定值。如果没有这个::,它将无法成功地在除了预填充绑定值之外的任何东西上工作。

因此,请确保您在某个时间点为一次性绑定的值设置了一些值。不要让它保持未定义。

比如当您有一个重复出现100次的条件时。确保当您将值绑定到重复器或某个确定lol状态的操作时,即使这个操作失败了(比如ajax调用错误),也要为其设置一个值(甚至null也是JavaScript中的一个值)。监视器将在即将到来的摘要周期后被删除,这会渲染相应的DOM绑定。

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

  • {{ ::item }}

而不是

  • {{ ::item }}

0