2

我正在使用angular-drag-and-drop-lists并有一个我希望重新排序的简单项目列表。

我有这个工作,但我希望能够捕获正在移动的项目的旧索引位置和新索引位置。

我已经尝试使用dnd-moveddnd-inserted按照下面的代码进行此操作。

标记:

<ul dnd-list="vm.route.stops"
        dnd-inserted="vm.stopInserted(index)">
          <li ng-repeat="stop in vm.route.stops"
              dnd-draggable="stop"
              dnd-moved="vm.stopMoved($index)"
              dnd-effect-allowed="move">
              <span>{{$index + 1}}.</span>
              <md-card style="width:280px;">
                <div layout="row">
                    {{stop.location}}
                </div>
              </md-card>
          </li>
      </ul>

控制器:

public stopMoved = (index: number) => {
    const stop = this.route.stops[index];
    console.log('Moved stop: ' +  stop.name + ' from position: ' + index);
    this.route.stops.splice(index, 1);
  }

  public stopInserted = (index: number) => {
    const stop = this.route.stops[index];
    console.log('Inserted stop: ' +  stop.name + ' at position: ' + index);
  }

我发现的问题是移动和插入停止时的输出索引值不是我所期望的。

我想我可能会遇到文档中提到的 dnd-inserted 属性的内容:

请注意,对于同一列表中的重新排序,旧元素仍将在列表中,因为尚未调用 dnd-moved

所以考虑一下我有四个项目添加到我的列表中。

在此处输入图像描述

然后我将“考文特花园”移到“滑铁卢桥”所在的位置:

在此处输入图像描述

控制台输出正确显示它是从索引 0 移动的,但说是在索引 3 处插入的(我希望它会说 2)

在此处输入图像描述

dnd-inserted函数在之前被调用dnd-moved,它遵循我在上面从文档中进一步引用的引用。

如果我向另一个方向移动项目,从下到上,我会看到与捕获的索引类似的行为。

所以开始如下:

在此处输入图像描述

我将“Blackfriars”移动到“Southwark”所在的位置:

在此处输入图像描述

控制台输出内容如下:

在此处输入图像描述

我希望看到它已从索引 3 移出。

我可能误解了使用这个库的一些基本知识。是否有一种干净的方法来跟踪项目的旧索引位置和新索引位置,这些索引位置已被删除\插入到该库的垂直列表中?

谢谢

4

0 回答 0