ng-repeat不受清除数组的影响

时间:2019-09-19 15:56:32

标签: angularjs angularjs-ng-repeat angularjs-digest

在html中,我要重复一个字符串数组:

<div class="palette__record"
     data-ng-repeat="n in palette track by $index"
     data-ng-style="{'background-color':'#'+n}">
</div>

在控制器palette中从localForage收集(与localstorage相同,但异步)

$localForage.getItem('palette')
    .then(colors => {
        if(colors) vm.palette = colors;
    });

这很好,现在单击按钮后,我通过在localForage中将其设置为[]来“清除”调色板,然后再次获取它并在控制器中设置值:

vm.clearEntirePalette = () => {
    $localForage.setItem('palette', [])
        .then(() => {
            $localForage.getItem('palette')
                .then(colors => {
                    console.log('clear palette', colors);
                    if(colors) {
                        vm.palette = colors;
                    } else {
                        vm.palette = [];
                    }
                });
        });
};

正如您所看到的,我正在控制台日志中进行仔细检查,这很好,它是空数组。现在,由于我一直希望我的数组包含8个元素(当对该数组进行其他操作时),因此我有$ watch,它是从上方之后 vm.palette = colors;调用的。

vm.$watch('palette', newVal => {
    console.log('caught change');

    if(newVal.length < 8) {
        const fillArr =  new Array(8 - newVal.length);
        fillArr.fill('');
        vm.palette = vm.palette.concat(fillArr);
        console.log('after fill', vm.palette)
        //$scope.$apply();
    }
}, true);

在上面的代码调色板是由8个空字符串组成的数组之后,这也可以正常工作。但是ng-repeat不能捕获此更改,也不会更新。填充后,我尝试在$scope.$apply()中使用$watch,但会导致错误

  

[$ rootScope:inprog] $ digest已经在进行中

如何修复它,以便ng-repeat反射数组?

0 个答案:

没有答案