【发布时间】:2020-01-31 13:46:09
【问题描述】:
我有一个这样的对象:
container = {
row1: [ '1', '2', '3', '4' ],
row2: [ '5', '6', '7', '8' ],
row3: [ '9', '10', '11', '12' ]
}
此数据填充我的 Angular 项目中的网格拖放组件。
当一个“项目”从一个数组移动到另一个数组时,我希望该数组中的最后一项移动到下一个数组并将所有对象向前推 1,这样我就可以确保其中只有 4 个对象每个数组。
我怎样才能做到这一点?我已经玩了太多小时了!
我有这个 'drop' 方法,当项目被添加/拖放到新数组中时会调用它:
drop(event: CdkDragDrop<string[]>) {
if (event.previousContainer === event.container) {
moveItemInArray(event.container.data, event.previousIndex, event.currentIndex);
} else {
transferArrayItem(
event.previousContainer.data,
event.container.data,
event.previousIndex,
event.currentIndex);
}
}
所以我现在需要的是:
this.container.data.unshift() //to the next array within the container array.
我也可以在我的组件中访问这个数组,所以甚至可以传入行名:
drop(event: CdkDragDrop<string[]>, rowName: string) {
if (event.previousContainer === event.container) {
moveItemInArray(event.container.data, event.previousIndex, event.currentIndex);
} else {
transferArrayItem(
event.previousContainer.data,
event.container.data,
event.previousIndex,
event.currentIndex);
}
}
我该如何做到这一点,如果需要的话,能够扭转它也很好。
这里是 StackBlitz:https://stackblitz.com/edit/angular-cdk-drag-drop-cmyh7k?file=app%2Fcdk-drag-drop-connected-sorting-example.html
【问题讨论】:
-
你的内部数组总是 4 个元素大吗?如果你从第一个数组中取出一个元素并把它扔到第二个数组中会发生什么?第一个数组是否被 3 个元素卡住了?有空吗?将一个元素扔到最后一个数组中怎么样?我们最后会得到一个新的 1 元素数组吗?
-
最初是的,但我打算尝试使其动态化,因此您可以使用变量来设置它,它可以是 2、4 或 6,并且可以设置每行上的对象数跨度>
-
我建议你只有一个数组,而不是对象数组,你将计数器设置为 0,循环遍历这个数组,然后每次计数器为 4 时创建一个新行然后将计数器重置为 0。这样你就不需要过滤,你可以在任何地方注入新项目。
-
为了清晰起见,我将创建一个堆栈闪电战
标签: javascript arrays angular typescript