gpt4 book ai didi

javascript - AngularJS $watch Controller 初始化期间的奇怪行为

转载 作者:数据小太阳 更新时间:2023-10-29 04:12:51 26 4
gpt4 key购买 nike

我有一个代码片段:

var app = angular.module('Demo', []);

app.controller('DemoCtrl', function ($scope) {
function notify(newValue, oldValue) {
console.log('%s => %s', oldValue, newValue);
}

$scope.$watch('collection.length', notify);
$scope.$watch('my', notify);

$scope.collection = [];
$scope.my = 'hello';
});

$watch 最初触发。此代码片段将输出:

0 => 0
hello => hello

这是正确的行为吗?当然,我可以检查值是否相等,但这种行为的原因是什么?

附言您可以在线试用此示例:http://jsbin.com/otakaw/7/edit

最佳答案

根据 documentation :

仅当当前值来自当前值时才调用监听器watchExpression 和之前对 watchExpression 的调用不是相等(初始运行除外,见下文)。

观察者注册到范围后,监听器 fn 是异步调用(通过$evalAsync)来初始化观察者。在极少数情况下,这是不可取的,因为当 watchExpression 的结果没有改变 时会调用监听器。为了检测这个监听器fn中的场景,你可以比较newVal旧值。如果这两个值相同 (===) 则监听器是由于初始化而调用。

关于javascript - AngularJS $watch Controller 初始化期间的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17338824/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com