我需要使用计算值来隐藏元素并在模板中执行其他操作。
<button ng-hide="expensive()" ng-click="foo()">foo</button>
<button ng-show="expensive() && otherFunction()" ng-click="bar()">bar</button>
<span ng-show="expensive()">Bas</span>
这会导致在每个 $digest
循环中多次执行 expensive()
。
我想重用它的结果,但它需要针对每个摘要执行 - 只是每个摘要不需要多次。
是否有任何最佳实践可以重用需要在每个摘要中重新计算的函数结果?
* 更新 * 这个函数适用于一个巨大的对象,它的属性可以通过页面上的大量输入字段和子公式来改变。它具有多个一对多关系。如果我必须向每个字段添加事件/ngChanges 并且我只遗漏了一个,这将无法正常工作。
最佳答案
您没有真正向我们提供足够的信息来为您提供最适合您情况的选择。
一般来说,最好的选择是让任何交互导致 expensive()
的返回值发生变化,更新 $scope.property 并在您的 View 中使用它。
换句话说,不要在你的 View 范围内使用函数,除非你正在设置像 ng-click 之类的绑定(bind)。相反,在需要更新时更新范围内的属性,并直接引用它们。
警告:这可能会诱使您使用 $watch...不要那样做。有更便宜、更有效的方法来触发更新,例如 ngChange 或其他此类事件。
关于Angularjs 重用计算值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19497545/