gpt4 book ai didi

javascript - 失去焦点后 Angular watch 不更新

转载 作者:行者123 更新时间:2023-12-03 07:28:19 24 4
gpt4 key购买 nike

当前我正在检查对象是否正在更改。更改后,我对其进行操作并更改一些值。更改后我将其保存到我的服务中。经过所有操作和节省后,我从服务中获取值,然后将其附加到 $scope.rows 中。记录 $scope.rows 后,我得到了预期的结果,但我的 View 没有更新。有谁知道如何解决这个问题吗?

我的代码:

//Set timeout var only
var updateDelay = null;
$scope.$watch('rows', function ( newValue, oldValue )
{
//Clear timeout
clearTimeout(updateDelay);
//Timeout
updateDelay = setTimeout(function ()
{
//Iterate over all rows to find the updated row
for ( var i = 0; i < newValue.length; i++ )
{
//If start_time, end_time and interval are filled in
if ( (newValue[i].start_time && oldValue[i].end_time && oldValue[i].interval) &&
(
(newValue[i].start_time.toString() != oldValue[i].start_time.toString()) ||
(newValue[i].end_time.toString() != oldValue[i].end_time.toString()) ||
(newValue[i].interval != oldValue[i].interval)
) )
{
//Set the interval to 4 as a test
newValue[i].interval = 4;
console.log('This row is changed' + i);
}
}

//Push the rows to the Service and then get the new values
// and bind it to the $scope.rows for the ng-repeat
$scope.rows = SheetService.setValues(newValue);
}, 750);
}, true);

最佳答案

将 setTimeout 替换为 $timeout 就可以了。

这是因为 setTimeout 将在 Angular 循环之外执行。当你这样做时,你需要调用 $scope.$apply() 作为最后一条指令。或者您可以使用 $timeout 来为您完成这项工作

关于javascript - 失去焦点后 Angular watch 不更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35912229/

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