我想查看字典中的更改,但由于某种原因未调用 watch 回调。
这是我使用的控制器:
function MyController($scope) { $scope.form = { name: 'my name', surname: 'surname' } $scope.$watch('form', function(newVal, oldVal){ console.log('changed'); }); }
这是小提琴。
我希望每次更改姓名或姓氏时都会触发 $watch 回调,但它不会发生。
正确的方法是什么?
调用$watchwithtrue作为第三个参数:
$watch
true
$scope.$watch('form', function(newVal, oldVal){ console.log('changed'); }, true);
默认情况下,在 JavaScript 中比较两个复杂对象时,会检查它们的“引用”相等性,这会询问两个对象是否引用同一事物,而不是“值”相等性,后者会检查这些对象的所有属性的值是否相等对象相等。
根据Angular 文档,第三个参数用于objectEquality:
objectEquality
当 时objectEquality == true,根据angular.equals函数判断 watchExpression 的不等式。为了保存对象的值以供以后比较,angular.copy使用该函数。因此,这意味着观看复杂的对象会对内存和性能产生不利影响。
objectEquality == true
angular.equals
angular.copy