【问题标题】:"destroy" ng-if once expression is true“销毁” ng-if 一旦表达式为真
【发布时间】:2016-03-04 07:52:33
【问题描述】:

我想知道一旦ng-if 的值为真,是否可以解除绑定/销毁?

我使用循环指令创建了树结构,每个分支都有<div ng-if="visible">,它会跟踪是否需要渲染元素。问题是该解决方案增加了观察者的数量,因为每个ng-if 都会创建一个新的。一旦ng-if 表达式变为true 它就不会改变所以手表可以被移除,在这种情况下有没有办法“摧毁”ng-if

【问题讨论】:

  • 您可以获取源代码并提升该指令代码,以便对其进行修改以执行您想要的操作

标签: javascript angularjs


【解决方案1】:

如果使用 angular 1.3+ 你可以这样做

<div ng-if="::visible">

这将从角度观察列表中删除表达式,并且基本上没有观察。将此用于应用程序中的任何单个绑定表达式。减少您的观看次数并加快消化周期。

【讨论】:

  • 我试过了,这个解决方案的问题是,一旦父作用域分配了值,所有子作用域都会继承它,所以默认情况下我必须为每个作用域变量分配假值。
  • 假设“visible”的值从undefined变为false再变为true,那么watcher在变为false的时候就会被丢弃,对吧?所以这并不能解决问题。
  • @evenstar 在控制器中使用 false 启动怎么样?然后等待它变为true-这应该可行。顺便说一句,上述解决方案适用于所提出的问题,即单个绑定而不是多个绑定!。如果您正在查看多个状态,则不能单独绑定。在它变为 true 后,您必须手动删除该观察者。
  • @VikasBansal 没问题。很高兴它有帮助。
【解决方案2】:

你可以使用bindonce library,它恰好有一个bo-if = "condition"指令属性,描述为:

相当于ng-if,但不使用观察者

所以与您想要实现的目标有些相似。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-03
    相关资源
    最近更新 更多