Angularjs 重用计算值

标签 angularjs

我需要使用计算值来隐藏元素并在模板中执行其他操作。

<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/

相关文章:

javascript - AngularJS toastr 在文件上传时显示警报两次而不是一次

javascript - 从指令中删除元素时,AngularJs 会自动销毁范围吗?

javascript - AngularJS ng-click : change value of list item that was clicked

javascript - 使用 angularjs 创建新的 packery 后 document.getElementById 返回 null

javascript - 根据按钮单击动态更改 iframe 大小

javascript - Angular 2 Typescript 打字路径问题

javascript - $http post 方法的 400 错误请求

javascript - 如何在 REST 调用成功或事件广播后加载 Angular 日期过滤器

javascript - Angular 1 ng-如果不显示div

javascript - 如何纠正这个问题?