Я пытаюсь использовать новый Angular 7 CDK Drag and drop для перемещения списка элементов на моем сайте, которые добавляются динамически.
Используя этот пример , взятый из примеров угловых документов и измененный для моих нужд, вы можете видеть, что у меня есть список элементов с опускаемым контейнером.
Проблема в том, что когда перетаскиваемые элементы генерируются из другого компонента, они не воспринимают родительский элемент сброса в качестве используемого контейнера сбрасываемого элемента. Вместо этого свойство контейнера для отбрасывания в объекте CDK Draggable имеет вид null
.
Я попытался установить свойство cdkDragRootElement
из директивы CdkDrag
, чтобы проверить, могу ли я каким-либо образом ссылаться на родительский элемент, но вместо этого он заставляет элементы перемещать весь родительский элемент. Это не ожидаемое поведение.
Может быть, мне не хватает свойства CDK Draggable или в контейнере CDK Droppable для ссылки на родительский список сброса в моих элементах списка?
Вот "соответствующий" код в примере:
CDK-перетаскивания сортировочный-example.html
<div cdkDropList class="example-list">
<app-test></app-test>
</div>
тест / test.component.ts
import { Component, OnInit } from '@angular/core';
import { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';
@Component({
selector: 'app-test',
templateUrl: './test.component.html',
styleUrls: ['./test.component.css']
})
export class TestComponent implements OnInit {
movies = [
'Episode I - The Phantom Menace',
'Episode II - Attack of the Clones',
'Episode III - Revenge of the Sith',
'Episode IV - A New Hope',
'Episode V - The Empire Strikes Back',
'Episode VI - Return of the Jedi',
'Episode VII - The Force Awakens',
'Episode VIII - The Last Jedi'
];
constructor() { }
ngOnInit() {
}
drop(event: CdkDragDrop<string[]>) {
console.log(event);
/*moveItemInArray(this.movies, event.previousIndex, event.currentIndex);*/
}
}
тест / test.component.html
<div class="example-box" *ngFor="let movie of movies" cdkDrag (cdkDragDropped)="drop($event)">
{{movie}}
</div>
EDIT
Ожидаемый результат:
CDK-перетаскивания сортировочный-example.html
<div cdkDropList class="example-list">
<app-test></app-test>
</div>
тест / test.component.html
<div class="example-box" *ngFor="..." cdkDrag cdkDropList=".example-list">
{{movie}}
</div>
Пройдите через родителей, чтобы найти селектор и проверьте, есть ли у него директива / экземпляр cdkDropList
, и присоедините его к cdkDrag
.