AngularJs 替代 ng-if 来保存摘要
AngularJs alternative to ng-if to save digest
我最近开始研究 AngulaJs 中的摘要和性能改进,并在我的网站上发现我正在使用大量 ng-if
。
有时在ng-if
中有一个变量可能会改变,但通常在控制器启动时固定,然后永远不会改变。
我应该怎么做才能提高性能避免摘要评估每个循环那些不可更改的ng-if
?我应该改变指令吗?用什么?
例如
在我的页眉模板中,我有一个 div 只能由特定类型的用户看到。它只是一个 div,所以我不想调用一些不同的模板。
我把 <div ng-if="userIsSuperior()"> ... </div>
第一次评估时,userIsSuperior()
的 return 值永远不会改变(当然在本次会话期间),但我知道 AngularJs Digest 会在每个循环中评估它。
我怎样才能避免这种情况?还是我遗漏了什么?
我想你要找的是one-time binding。
如果您使用:
<div ng-if="::userIsSuperior()"> ... </div>
那么 userIsSuperior()
的值将只计算一次,并保持该值。
见demo。
第一个答案解决方案需要 AngularJS > 2.
我找到了使用一次性绑定库 OnceJS 的有效解决方案。
我最近开始研究 AngulaJs 中的摘要和性能改进,并在我的网站上发现我正在使用大量 ng-if
。
有时在ng-if
中有一个变量可能会改变,但通常在控制器启动时固定,然后永远不会改变。
我应该怎么做才能提高性能避免摘要评估每个循环那些不可更改的ng-if
?我应该改变指令吗?用什么?
例如
在我的页眉模板中,我有一个 div 只能由特定类型的用户看到。它只是一个 div,所以我不想调用一些不同的模板。
我把 <div ng-if="userIsSuperior()"> ... </div>
第一次评估时,userIsSuperior()
的 return 值永远不会改变(当然在本次会话期间),但我知道 AngularJs Digest 会在每个循环中评估它。
我怎样才能避免这种情况?还是我遗漏了什么?
我想你要找的是one-time binding。
如果您使用:
<div ng-if="::userIsSuperior()"> ... </div>
那么 userIsSuperior()
的值将只计算一次,并保持该值。
见demo。
第一个答案解决方案需要 AngularJS > 2.
我找到了使用一次性绑定库 OnceJS 的有效解决方案。