属性更新时不会触发$ scope。$ watch

Xenology

这是观察者声明:

$scope.$watch($scope.currentStep , function(newVal , oldVal){
    console.log('Watch: ' ,$scope.currentStep , newVal , oldVal);
});

这是唯一更改currentStep属性的代码,这些功能是在浏览器中单击按钮时触发的:

$scope.next = function(valid , event){
    event.preventDefault();

    if(valid){
        $scope.error = false;

         $scope.validate();

        if($scope.currentStep < $scope.totalSteps && !$scope.error){
            $scope.previousStep = $scope.steps.indexOf(true);
            $scope.currentStep = $scope.steps.indexOf(true) + 1;

            $scope.steps[$scope.previousStep] = false;
            $scope.steps[$scope.currentStep] = true;                       
        }
    }
    else {
        $scope.error = true;
        $scope.errorText ="Please fix your mistakes";
    }
}

$scope.prev = function(){
    $scope.error = false;
    $scope.final = false;
    $scope.lastPush --;

    $scope.previousStep = $scope.steps.indexOf(true);
    $scope.currentStep = $scope.steps.indexOf(true) - 1;

    $scope.steps[$scope.previousStep] = false;
    $scope.steps[$scope.currentStep] = true;            
}

我不明白的是,无论我做什么,手表只在变量的初始化时触发。当currentStep更新时,手表会错过它。我尝试在watch中包含第三个参数,以强制观察者按相等方式而不是引用方式进行比较,但这不能解决问题。我在这里想念什么?

土豆沙拉

根据文档,您的$watch表达式必须为aString或a Function$rootScope.$watch

以下任何一种都可以工作:

// String
$scope.$watch('currentStep', function(newVal, oldVal) {
    console.log('Watch: (current) %o (new) %o (old) %o', $scope.currentStep, newVal, oldVal);
});

// Function
$scope.$watch(function() {
    return $scope.currentStep;
}, function(newVal, oldVal) {
    console.log('Watch: (current) %o (new) %o (old) %o', $scope.currentStep, newVal, oldVal);
});

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

AngularJS $ scope。$ watch对象的属性

$ watch()没有更新$ scope

$ scope。$ watch不会在每次更改时触发

调用angular.extend不会导致$ scope。$ watch触发

没有$ scope.digest,$ watch不会触发

$ scope变量的更改未触发角$ watch

$ scope。$ watch在jQuery onchange之后不触发?

AngularJS $ scope。$ watch选择输入的属性ngModel

从指令添加值时,数组上的$ scope。$ watch不更新

Angular自定义指令-$ scope。$ watch不触发

$ scope。$ watch不触发(控制器为vm)

scope。$ watch在控制器内不触发

AngularJS —将要监视的对象/对象属性传递到$ scope。$ watch

angularjs指令未使用scope。$ watch进行更新

父控制器上的$ scope。$ watch不会在子ng-select上触发

在控制器中使用`this`范围时使用$ scope。$ watch

AngularJS 1.5:scope。$ watch内部链接函数不会在模型更改时更新

使用`this。$ watch`代替`$ scope。$ watch`和'Controller As'

$ scope或$ scope。$ watch中的作用域?

$scope.$watch 如何工作

在$ scope。$ watch上实施延迟

angularJS scope。$ watch整个对象

角$ scope。$ watch newVal!== oldVal

使用axios时不会触发Vue Watch

角度UI路由器视图的控制器会导致$ scope。$ watch不触发吗?

scope.$watch 不使用散列对象(关联数组)触发?

scope。$ watch与指令一起返回未定义的属性值

输入框为空时angularJS $ scope。$ watch无法正常工作

$ scope。$ watch和$ watch之间有什么区别?