Как получить доступ к свойству компонента внутри функции принятия ng2-dragula - PullRequest
0 голосов
/ 11 сентября 2018

Я почти уверен, что делаю что-то действительно не так. У меня есть простой компонент, имеющий модель Dragula, и я не хочу принимать дубликаты при перетаскивании на него.

Чтобы проверить наличие дубликатов, я хочу использовать связанный массив dragula ngModel, который является свойством компонента (personInfoList), внутри функции accept для пакета, но поскольку это не параметр, он всегда пуст. Я знаю, что должен использовать цель, но это html-элемент, и поиск по нему и поиск, если перетаскиваемый элемент уже существует, не очень производительный.

Вот файл с машинописным текстом:

export class PersonGroupComponent implements OnInit {

  @Input() templateData: string;
  personInfoList: Array<PersonInfo> = [];
  listGroup: Group;
  constructor(private dragulaService: DragulaService) {
  }

  ngOnInit() {
    this.listGroup = this.dragulaService.find(`personInfoList`);
    this.listGroup.options.removeOnSpill = true;
    this.listGroup.options.copy = (el, source) => { return source.id === 'sidebar' };
    this.listGroup.options.copyItem = (person: PersonInfo) => { return new Person() };
    this.listGroup.options.accepts = (el, target, source, sibling) => {
      console.log(el);
      const draggedElementId: number = parseFloat(el.querySelector('user-mgmt-person').id);
      console.log(draggedElementId);
      if (target.id !== 'sidebar' && !this.isInList(this.personInfoList, parseInt(el.id))) {
        return true;
      }
    };

  }

  personModelChanged(event: Array<PersonInfo>) {
    console.log('person list updated from drag event');
    console.log(event);
  }

   isInList(list: PersonInfo[], id: number): boolean {

   list.forEach(element => {
      if (element.personId === id) {
         return true;
       }
    });
   return false;
  }

Чтобы сделать вопрос более общим, есть ли другой способ поиска дубликатов при принятии перетаскиваемого элемента, кроме использования параметров из функции accept?

...