1

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 "";
    }
});
4

2 に答える 2

1

angular $timeout サービスには、$apply$rootScope ( https://github.com/angular/angular.js/blob/v1.2.0rc1/src/ng/timeout.js#L10 )全体の呼び出しが含まれます。新しいダイジェストを作成し、フィルターを再評価してください。それが望ましくない場合は、代わりにプレーンな js setTimeout を使用し、スコープを処理するビットだけを$scope.$apply自分でラップします。

于 2013-09-04T15:07:20.493 に答える