我有这个简单的控制器标记
<div ng-controller="TestCtrl" ng-show="isVisible()">
<input type="text" ng-model="smth"/><br>
<span>{{smth}}</span>
</div>
Run Code Online (Sandbox Code Playgroud)
和控制器本身
function TestCtrl($scope, $log)
{
$scope.smth = 'smth';
$scope.isVisible = function(){
$log.log('isVisible is running');
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
为什么在模型的每一个小变化之后(例如在文本框中更改一个字母)我可以isVisible is running在控制台中看到?这种情况不是问题,但我认为它将在大型应用中.我可以避免这个吗?
Liviu T.是对的.您无法避免isVisible在每个范围更改时执行您的功能.如果Angular没有重新运行此函数,那么它可能与其余代码不同步(例如,如果它使用$scope.smth模型来解析返回值).
考虑到这一点,你应该总是尝试使你的函数幂等/纯(在给定相同输入的情况下总是返回相同的输出)和光,因为诸如ng-hide,ng-show,ng-class和类似的指令将始终重新 - 在每个$ digest周期中评估分配给它们的表达式.
现在,如果您真的不希望它再次执行,您可以尝试一些用于缓存函数输出的memoization技术.
| 归档时间: |
|
| 查看次数: |
7710 次 |
| 最近记录: |