gpt4 book ai didi

javascript - $scope.$watch 不会在每次更改时触发

转载 作者:行者123 更新时间:2023-12-03 12:14:26 26 4
gpt4 key购买 nike

我正在使用 angularJS 1.4.8,昨天我注意到 $scope.$watch 不会触发每个导致我的应用程序出现错误的更改。

有没有办法强制它立即对每一个变化起作用?
就像在这段代码中一样,在消息的每次更改中,我希望 watch 中的函数触发:

(function(){

angular.module('myApp', [])
.controller('myAppController', myAppController)

function myAppController($scope){
console.log('controller loading !');
$scope.message = 'message1';

$scope.$watch('message', function(newMessage){
console.log('newMessage', newMessage)
});

function changeMessage(){
$scope.message='hi';
$scope.message='hi12';
}

changeMessage();
}

})();

控制台将打印:
controller loading !
newMessage hi22

插件链接 https://plnkr.co/edit/SA1AcIVwr04uIUQFixAO?p=preview

编辑:
我真的很想知道除了用超时包装更改并使用范围应用之外,是否还有其他方法,在我的原始代码中,我在多个地方更改了范围属性,我想避免每次更改都使用这个。

最佳答案

发生这种情况是因为只有在摘要循环“之间”更改值时才会触发监视。

您的函数正在更改同一函数范围内的消息值。这将在同一个摘要循环中执行。
当 Angular 移动到下一个循环时,它只会看到最后更改的值,在您的情况下将是 hi22 .

Here's一篇很好的文章,让这种行为变得清晰

关于javascript - $scope.$watch 不会在每次更改时触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46048353/

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