1

很难理解 $watch。我将它与计时器一起使用来增加一个值 - 如果用户想继续,则尝试在五秒钟后提示用户。如果他们选择“取消”,则计时器停止计数。

小提琴在这里:http: //jsfiddle.net/nicktest222/VuuEK/4/

// Increment with $timeout
$scope.counter = 0;
$scope.onTimeout = function () {
    $scope.counter++;
    mytimeout = $timeout($scope.onTimeout, 1000);
};
var mytimeout = $timeout($scope.onTimeout, 1000);

// Watch
$scope.$watch($scope.counter, checkTime);

function checkTime() {
    console.log($scope.counter);
    if ($scope.counter === 5) {
        var check = confirm('Do you want to continue?');
        if (check === false) {
            $scope.stop();
        }
    }
}

checkTime 函数在页面加载时触发一次,我希望它会触发每个增量,因为 $scope.counter 变量每秒都在变化。

4

2 回答 2

5

$watch需要一个角度表达式,这就是你想要的:

    $scope.$watch('counter', checkTime);
于 2013-10-10T22:55:10.683 回答
2

为了扩展 Jason 的答案,您可以$watch在任何范围的任何变量上使用 a,因为参数只是一个字符串,因此在您的控制器内部,您也可以监视$rootScope

$scope.$watch('counter', ...)

$rootScope.$watch('rootCounter', ...)

于 2013-10-10T23:00:26.800 回答