Как мы можем интегрировать cdk Drag and Drop в раскрывающийся список ng-select

Можно ли изменить порядок значений множественного выбора в ng-select с помощью перетаскивания cdk. вы можете проверить Stackblitz. Реализация изменение значений модели, но не отображается в раскрывающемся списке. как пользователь может переставить несколько выбранных значений из раскрывающегося списка с помощью cdk Drap and Drop. HTML для ng-select с помощью cdk Drag drop

<label>Drap and drop</label>
<ng-select cdkDropList (cdkDropListDropped)="drop($event)" [cdkDropListData]="selectedLocations"
  [(ngModel)]="selectedLocations" [items]="Locations" [searchable]="true" bindLabel="name"  [multiple]="true"
  placeholder="Select Locations">
  <ng-template ng-label-tmp let-item="item" let-clear="clear">
    <div cdkDrag>
      <span
        class="ng-value-icon right"
        (click)="clear(item)">×
      </span>
      <span>{{item.name}}</span>
    </div>
  </ng-template>
</ng-select>
<p> {{selectedLocations|json}}</p>

Изображение 1

Изображение 2

Можно ли использовать эту функцию с ng-select или любыми другими предложениями для достижения того же.


person HV712    schedule 14.05.2021    source источник


Ответы (1)


Единственный способ, которым я могу добиться этого, - это смешивание двух структур.

Один будет cdkDropList, но с горизонтальной ориентацией, например https://stackblitz.com/angular/eqqmymbjevo?file=src%2Fapp%2Fcdk-drag-drop-horizontal-sorting-example.ts

И скрытый раскрывающийся список, который отображается, когда вы щелкаете значок V по вашему выбору. К каждому элементу раскрывающегося списка вы присоединяете событие (щелчок), запускающее метод для его добавления в исходный массив cdkDropList и удаления его из раскрывающегося исходного списка.

Для каждого элемента, добавленного в источник cdkDropList, прикрепите метод для удаления самого себя и добавьте его обратно в раскрывающийся список ...

Это хороший вариант ... Может потребоваться время, но поможет

person Rafael de Castro    schedule 14.05.2021
comment
Я не хочу менять ng-select, так как мне нужна реализация немного раньше :(. Что, если я покажу выбранные значения в таблице и использую перетаскивание cdk на том же самом. Это просто мысль - person HV712; 15.05.2021
comment
Cdk drag drop не сохраняет порядок в списке. Будет немного грязно, но вы можете попробовать: D - person Rafael de Castro; 15.05.2021
comment
Спасибо Рафаэлю де Кастро за ваш вклад. Я могу изменить выбор в раскрывающемся списке, а также модель. Но когда я перетаскиваю контент, он отображается за раскрывающимся списком, и мне не кажется, что пользователь перетаскивает элемент. Я тоже обновил stackBlitz. Любое руководство по этому поводу будет большим подспорьем. - person HV712; 15.05.2021
comment
@ HV712 это происходит потому, что перетаскиваемый элемент, который вы видите, на самом деле является дубликатом, который API создает для отображения перетаскивания. Вы можете управлять свойствами css этого элемента, используя класс: .cdk-drag-preview и применяя свойство z-index: 9999 с помощью! Important - person Rafael de Castro; 16.05.2021