小编典典

$watch 一个对象

all

我想查看字典中的更改,但由于某种原因未调用 watch 回调。

这是我使用的控制器:

function MyController($scope) {
    $scope.form = {
        name: 'my name',
        surname: 'surname'
    }

    $scope.$watch('form', function(newVal, oldVal){
        console.log('changed');
    });
}

这是小提琴

我希望每次更改姓名或姓氏时都会触发 $watch 回调,但它不会发生。

正确的方法是什么?


阅读 97

收藏
2022-04-12

共1个答案

小编典典

调用$watchwithtrue作为第三个参数:

$scope.$watch('form', function(newVal, oldVal){
    console.log('changed');
}, true);

默认情况下,在 JavaScript
中比较两个复杂对象时,会检查它们的“引用”相等性,这会询问两个对象是否引用同一事物,而不是“值”相等性,后者会检查这些对象的所有属性的值是否相等对象相等。

根据Angular
文档
,第三个参数用于objectEquality

当 时objectEquality == true,根据angular.equals函数判断
watchExpression
的不等式。为了保存对象的值以供以后比较,angular.copy使用该函数。因此,这意味着观看复杂的对象会对内存和性能产生不利影响。

2022-04-12