在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反射数组?