首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Angularjs重用计算值

Angularjs重用计算值
EN

Stack Overflow用户
提问于 2013-10-21 14:41:40
回答 3查看 550关注 0票数 3

我需要使用一个计算值来隐藏元素,并在模板中做其他事情。

代码语言:javascript
运行
复制
<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>

这会导致expensive()在每个$digest循环中多次过量。我想重用它的结果,但是它需要对每个摘要执行--只是不需要每次摘要执行多次。

是否有任何需要重新计算每个摘要的重用功能结果的最佳实践?

* update *这个函数与一个巨大的对象一起工作,它的属性可以随着页面上的大量输入字段和子公式而改变。它有多到多的关系。如果我必须将events / ngChanges添加到每个字段中,如果我只错过了一个字段,这将无法正常工作。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-10-21 16:44:04

你并没有给我们足够的信息来为你的处境提供最佳选择。

一般来说,最好的选择是进行任何导致expensive() 返回值的交互,以更改更新$scope.property,并在您的观点中使用它。

换句话说,不要在视图中的作用域上使用函数,除非您正在设置像ng-click之类的绑定。相反,只要需要更新范围内的属性,只需直接引用它们就可以更新它们。

注意:这可能会诱使你使用$watch.别干那事。有更便宜、更有效的方法来触发更新,如ngChange或其他类似事件。

票数 2
EN

Stack Overflow用户

发布于 2013-10-21 14:58:22

你有几个选择:

  1. 做出昂贵的$q承诺。角模板理解$q承诺并相应地解决它们
  2. 运行该函数时存储该值,如果该值存在,则首先在该函数中返回该值。如果要刷新缓存的值,可以向其添加一个刷新参数。
  3. 如果值一旦计算就不会改变,您可以将它们放到一个解决方案中。
  4. 如果这些值是某些DOM工作的结果,则创建一个指令来执行此操作,并对父作用域进行$emit实际更改。
票数 1
EN

Stack Overflow用户

发布于 2013-10-21 15:07:34

尝尝这个。

代码语言:javascript
运行
复制
<button ng-hide="result" ng-click="foo()">foo</button>
<button ng-show="result && otherFunction()" ng-click="bar()">bar</button>
<span ng-show="expensive()">Bas</span>

主计长:

代码语言:javascript
运行
复制
$scope.expensive = function() {
    ... do stuff ...
    $scope.result = ...;
    return $scope.result;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19497545

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档