Создайте сортируемый список перетаскиванием с помощью angular5 и ng-bootstrap

У меня работает большая часть моего приложения, и последняя часть - показать список элементов, которые пользователь может переставить в другом порядке и сохранить его в этом новом порядке. Я занимаюсь разработкой с использованием angular5 (cli) и ng-bootstrap.

Как мне создать такой список? Я вижу, что это возможно с помощью ngx-bootstrap (https://valor-software.com/ngx-bootstrap/#/sortable) но я бы предпочел не меняться сейчас, когда я почти закончил. Есть ли способ сделать это с помощью ng-bootstrap?

Изменить, чтобы добавить пример данных

Данные имеют такую ​​структуру (массив объектов):

data = [
  {name: 'adam',id: 'asedf'}, 
  {name: 'brian', id: 'aeqww'}, 
  {name: 'carl', id: '34534'}
]

Вызывается из HTML как

<ul>
  <li *ngFor = "let person of data; let i=index;">{{person.name}}</li>
</ul>

И я хочу, чтобы пользователь мог изменить список имен и отразить его в базовой модели данных.

Можете ли вы опубликовать образец списка и на основании чего вы хотите переставить в другом порядке

Rak2018 02.05.2018 19:09
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
0
1
1 262
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Для этого можно использовать сортировку:

dataToSort = [
    { name: 'dadam', id: 'asedf' },
    { name: 'brian', id: 'aeqww' },
    { name: 'catl', id: '34534' },
    { name: 'carl', id: '34534' }
  ]

this.dataToSort.sort(function (a, b) {
      if (a.name > b.name) {
        return 1;
      }
      if (a.name < b.name) {
        return -1;
      }
      return 0;
    });

BeforeSort:

AfterSort

Спасибо, вы правы, что я могу отсортировать список, но Пользователь должен иметь возможность перетаскивать, чтобы переупорядочить список, с переупорядочиванием, привязанным к модели данных. отсюда и запрос angular / bootstrap.

Tim 02.05.2018 20:29
Ответ принят как подходящий

В конце концов я пропустил ng-bootstrap и использовал Dragula.

Шаблон HTML:

<ul [dragula]='"thebag"' [dragulaModel] = "data">
  <li *ngFor = "let person of data">person.name</li>
</ul>

Компонент:

import { DragulaService } from 'ng2-dragula';

export class MyComponent implements OnInit {
  data: any[];

constructor(private dragulaService: DragulaService) {
  dragulaService.setOptions('thebag', {});
  dragulaService.dropModel.subscribe((value) => {
    this.onDropModel(value);
  })
  this.data = [];
}
private onDropModel(args: any): void {
  const [el, target, source] = args;
  console.info('onDropModel:');
  console.info(el);
  console.info(target);
  console.info(source);
}

save() {
  console.info(this.data);
  }
}

Другие вопросы по теме