如果我有一个视图:
<div ng-repeat="foo in foos">
<p ng-if="bar">omg lol</p>
<p ng-if="!bar">lol omg</p>
</div>
Run Code Online (Sandbox Code Playgroud)
我实际上创造了(2*foos.length)+ 1 $$观察者,这真的不太好.我在网上找到了几个说你可以做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>
Run Code Online (Sandbox Code Playgroud)
我相信这会给我一些像4个观察者的东西......所以我正在寻找另一种选择,以避免像那样愚蠢.
PSL*_*PSL 36
只是扩展我的评论来回答.
Angular 1.3一次性绑定语法(::
)确实会删除不必要的手表.只需在设置相关数据后需要测量手表一段时间.这就是为什么.当您在视图上设置一次性绑定属性时,angular将在其上设置临时监视,直到它获得定义的值,即除了undefined
.这种方法有一个原因 - 为了支持通过延迟操作(如ajax调用,超时,承诺链解析等)::
填充的绑定值.如果不这样,除了预先填充的绑定值之外的任何内容都不会成功.
因此,请确保在某个时间点为一次性绑定值设置一些值.不要让它保持不确定.
说你的病情<div ng-if="::lol"></div>
重复了100次.只要确保将值绑定到转发器或某个确定状态的lol
操作即使该操作失败(例如ajax调用错误)仍然设置一个值(甚至null
也是javascript中的值).在即将到来的摘要周期之后将删除手表,这将呈现相应的DOM绑定.
在你的特定的plunker你也可以这样做:
<ul ng-repeat="item in items" ng-if="::lol">
<li>{{ ::item }}</li>
</ul>
Run Code Online (Sandbox Code Playgroud)
代替
<ul ng-repeat="item in items">
<li ng-if="::lol">{{ ::item }}</li>
</ul>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
19853 次 |
最近记录: |