Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS在我不';不要改变范围内的任何东西_Javascript_Angularjs_Angularjs Scope - Fatal编程技术网

Javascript AngularJS在我不';不要改变范围内的任何东西

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

我需要在我的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 "";
    }
});

angular$timeout服务包括对整个$rootScope()调用
$apply
,这将生成一个新摘要并重新评估过滤器。如果这不是您想要的,只需使用一个简单的js setTimeout,并在
$scope.$apply
中仅包装处理scope的位即可

First,$timeout在计时器达到0时导致$scope.$digest(),这将重新评估绑定。其次,每次迭代时间时,您都会更改$scope.time和$scope.formattedTimeValue的值,这两个值都会导致Angular运行摘要并重新评估您的值。

谢谢,这真的很有帮助,我现在感到惭愧,我想可以使用第三个参数将apply调用跳过$timeout。