焦点丢失后角度观看不更新

时间:2016-03-10 09:21:38

标签: javascript angularjs

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

我的代码:

//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);

1 个答案:

答案 0 :(得分:1)

将setTimeout替换为$ timeout,你会没事的。

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