Javascript AngularJS在我不';不要改变范围内的任何东西
我需要在我的Angular应用程序中更新一个小小的数字“时钟”。 我正在控制器中使用以下代码:Javascript AngularJS在我不';不要改变范围内的任何东西,javascript,angularjs,angularjs-scope,Javascript,Angularjs,Angularjs Scope,我需要在我的Angular应用程序中更新一个小小的数字“时钟”。 我正在控制器中使用以下代码: $scope.time = new Date(); var interval = $timeout(function updateTime() { console.log("Update time"); $scope.time = new Date(); $scope.formattedTimeVa
$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 "";
}
});
angular$timeout服务包括对整个$rootScope()调用
$apply
,这将生成一个新摘要并重新评估过滤器。如果这不是您想要的,只需使用一个简单的js setTimeout,并在$scope.$apply
中仅包装处理scope的位即可 First,$timeout在计时器达到0时导致$scope.$digest(),这将重新评估绑定。其次,每次迭代时间时,您都会更改$scope.time和$scope.formattedTimeValue的值,这两个值都会导致Angular运行摘要并重新评估您的值。谢谢,这真的很有帮助,我现在感到惭愧,我想可以使用第三个参数将apply调用跳过$timeout。