我需要使用一个计算值来隐藏元素,并在模板中做其他事情。
<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添加到每个字段中,如果我只错过了一个字段,这将无法正常工作。
发布于 2013-10-21 16:44:04
你并没有给我们足够的信息来为你的处境提供最佳选择。
一般来说,最好的选择是进行任何导致expensive() 返回值的交互,以更改更新$scope.property,并在您的观点中使用它。
换句话说,不要在视图中的作用域上使用函数,除非您正在设置像ng-click之类的绑定。相反,只要需要更新范围内的属性,只需直接引用它们就可以更新它们。
注意:这可能会诱使你使用$watch.别干那事。有更便宜、更有效的方法来触发更新,如ngChange或其他类似事件。
发布于 2013-10-21 14:58:22
你有几个选择:
发布于 2013-10-21 15:07:34
尝尝这个。
<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>主计长:
$scope.expensive = function() {
... do stuff ...
$scope.result = ...;
return $scope.result;
}https://stackoverflow.com/questions/19497545
复制相似问题