当我不更改范围中的任何内容时,AngularJS 会重新评估绑定
AngularJS reevaluates bindings when I don't change anything in the scope
我需要在我的 Angular 应用程序中更新一个小数字"时钟"。我在控制器中使用以下代码:
$scope.time = new Date();
var interval = $timeout(function updateTime() {
console.log("Update time");
$scope.time = new Date();
$scope.formattedTimeValue = WBUtils.formattedTime($scope.time);
interval = $timeout(updateTime, 1000);
}, 1000);
我使用{{formattedTimeValue}}
表达式在我的 html 中的一个小div 中显示formattedTimeValue
。我还有一个使用过滤器格式化数据的 ng-repeat 指令。我的问题是这些过滤器每秒都会被重新评估。我不明白为什么。我已将间隔函数更改为以下内容,但过滤器仍然会被重新评估:
var interval = $timeout(function updateTime() {
console.log("Update time");
interval = $timeout(updateTime, 1000);
}, 1000);
有人可以向我解释为什么我的过滤器每秒都会在 ng-repeat 中为每个对象(不变(进行评估。筛选器当前如下所示:
module.filter('formatLogRecord', function () {
return function (log) {
console.log("Filtering");
return "";
}
});
角度$timeout服务包括调用整个$rootScope(https://github.com/angular/angular.js/blob/v1.2.0rc1/src/ng/timeout.js#L10(的$apply
,这将导致新的摘要并重新评估过滤器。如果这不是你想要的,只需使用普通的 js setTimeout 代替,并只将处理作用域的位包装在自己$scope.$apply
。
首先,当计时器达到 0 时,$timeout会导致 $scope.$digest((,这会重新评估绑定。其次,每次迭代时间时,您都会更改 $scope.time 和 $scope.formattedTimeValue 的值,这两者都会导致 Angular 运行摘要并重新评估您的值。
相关文章:
- AngularJs指令,该指令创建内部有数据对象的新指令
- 如何从Angularjs中的新日期获取日期格式
- AngularJs/GitHub :如何在没有任何历史记录的情况下将角度种子克隆到我的新项目中
- 如果所有其他元素都填写在AngularJS中,如何动态添加新的输入元素
- 如何在AngularJS中调试评估的JavaScript
- AngularJs针对多个条件评估表达式
- 将jquery插件应用于angularJS ng repeat中的新项目
- AngularJS-将HTML元素的作用域更改为新的作用域
- AngularJS-使用ng-click在新窗口中打开链接
- 将AngularJS变量发送到新的弹出窗口
- 在编译AngularJS指令中的模板之前,先评估传入的文本
- AngularJS:触发对包含过滤器的绑定的评估
- 在AngularJS中对指令的隔离作用域设置新属性
- AngularJS ForEach将新项目推送到对象中
- 阻止评估和新功能
- $q服务 - 我应该在新的 AngularJS 应用程序中使用 CommonJS 风格还是构造函数风格
- 使用内部数组遍历数组并创建新对象 - AngularJS
- 正在评估AngularJS ng-show指令中的表达式
- 用JavaScript添加新的AngularJS变量
- 重新评估AngularJS中的定时器过滤器