这实际上取决于您的列表的大小,您可以采用两种方法(都不完美),都涉及向您的 GoAngular 模型添加 position 属性(或创建专门用于跟踪位置的模型):
让我们以此为出发点:
[
{ title: 'Item A', position: 1 },
{ title: 'Item B', position: 2 },
{ title: 'Item C', position: 3 },
{ title: 'Item D', position: 4 },
]
如果列表很小(数百个项目),您可以在位置变化时更新位置,因此如果“项目 B”在“项目 C”之后移动,您将更新位置(使用 $set) B & C 项:
[
{ title: 'Item A', position: 1 },
{ title: 'Item C', position: 2 },
{ title: 'Item B', position: 3 },
{ title: 'Item D', position: 4 },
]
或者,您可以在两个位置的中间插入一个项目,这在大型列表中更实用。如果在“项目 C”之后再次移动“项目 B”,您将只更新“项目 B”的位置。在本例中为 (3+4) / 2 = 3.5:
[
{ title: 'Item A', position: 1 },
{ title: 'Item C', position: 3 },
{ title: 'Item B', position: 3.5 },
{ title: 'Item D', position: 4 },
]
这有帮助吗?