我想监视字典中的更改,但是由于某种原因,未调用监视回调。
这是我使用的控制器:
function MyController($scope) { $scope.form = { name: 'my name', surname: 'surname' } $scope.$watch('form', function(newVal, oldVal){ console.log('changed'); }); }
这是小提琴。
我希望每次更改名称或姓氏时都会触发$ watch回调,但是不会发生。
正确的方法是什么?
调用$watchwith true作为第三个参数:
$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