nG2-dragula setOptions и проблема удаления версии
Видимо поддержка 1.5.0 this.dragulaService.setOptions
в то время как 2.1.1 нет и наоборот, в то время как поддержка 2.1.1 this.dragulaService.drop
подписаться на 1.5.0 нет.
Соответствующий код для уведомления:
1.5.0 (не работает)
Невозможно вызвать выражение, тип которого не имеет подписи вызова. Тип 'EvenEmitter' не имеет совместимых подписей вызовов. (свойство) AppComponent.dragulaService: DragulaService
this.dragulaService.drop("dnd")
.subscribe(({ name, el, target, source, sibling }) => {
//content
}
1.5.0 (работает)
this.dragulaService.setOptions('dnd', {
moves: (el, source, handle, sibling) => !el.classList.contains('nodrag')
});
2.1.1 (работает)
this.dragulaService.drop("dnd")
.subscribe(({ name, el, target, source, sibling }) => {
//content
}
2.1.1 (не работает)
this.dragulaService.createGroup("dnd", {
moves: (el, source, handle, sibling) => !el.classList.contains('nodrag')
});
Аргумент типа '{move: (el: any, source: any, handle: any, sibling: any) => boolean; }'нельзя назначить параметру типа'DragulaOptions'. Объектный литерал может указывать только известные свойства, а "ходы" не существуют в типе "Параметры Dragula". дескриптор (параметра): любой
Обратите внимание, что хотя есть руководство по миграции и журнал изменений, в нем указано, как заменить setOptions в группу создания. Но это все еще не работает в моем случае.
Есть ли способ использовать обе функции? Или я что-то упускаю очевидное?
2 ответа
Вы хотите: создать группу и использовать функциональность drop вместе?
Мы используем createGroup
вместе с drop
но с одним небольшим отличием, но с небольшим отличием - сервисы отбрасывания добавляются в подписку, но я не думаю, что это имеет какое-либо значение. Итак, наш код найма:
export class xxxComponent implements OnInit {
...
public dragula$: Subscription
...
constructor(public dragulaService: DragulaService) {
this.dragulaService.createGroup('ITEMS', {
direction: 'vertical',
moves: (el, source, handle): boolean => handle.className.indexOf('item-keeper') > -1
});
}
ngOnInit() {
this.dragula$.add(this.dragulaService.drop('ITEMS')
.subscribe(({name, el}) => {
....
})
);
}
}
Я думаю, что наши решения правильны в соответствии с документацией о событиях: https://github.com/valor-software/ng2-dragula
Наконец, я думаю, что ваша проблема - ошибка с именем класса, потому что все остальные отлично работают на вашем примере Stackblitz. Если вы раскомментируете:
this.dragulaService.createGroup("dnd", {
moves: (el, source, handle, sibling) => !el.classList.contains('nodrag')
});
Ваши ярлыки не перетаскиваются, поэтому вы получаете то, что вам нужно.
Вот что сработало для меня.
импортировать эти зависимости.
import { DragulaService } from 'ng2-dragula';
import { Subscription } from 'rxjs/Subscription';
.ts файл -
MANY_ITEMS = 'MANY_ITEMS';
subs = new Subscription();
constructor(private dragula: DragulaService) {
this.subs.add(dragula.dropModel(this.MANY_ITEMS)
.subscribe(({ el, target, source, sourceModel, targetModel, item }) => {
console.log(el, target, source, sourceModel, targetModel, item);
})
);
}
.html файл -
<ul [(dragulaModel)]='arrayList' [dragula]="MANY_ITEMS">
<li>one</li>
<li>two</li>
</ul>
Вы сможете перетаскивать элементы списка "один" и "два".