angular - 具有动态列表的数组之间的Angular7 cdkDropList
问题描述
我收到以下错误:ERROR TypeError: Cannot assign to read only property '2' of string 'One'
来自我创建的以下数据列表以模仿我的实际数据的形式,以及我从角度材料文档中看到的用于此类动态列表的模板视图。但是,即使他们说该怎么做,他们也没有举例说明..
我无法使以下工作:
零件:
lists = [];
ngOnInit() {
this.lists = [{number: 'One', amount: [1, 2, 3, 4]}, {number: 'Two', amount: [5, 6, 7, 8]}, {number: 'Three', amount: [9, 10, 11, 12]}];
}
drop(event: CdkDragDrop<string[]>) {
if (event.previousContainer === event.container) {
moveItemInArray(event.container.data, event.previousIndex, event.currentIndex);
} else {
transferArrayItem(event.previousContainer.data,
event.container.data,
event.previousIndex,
event.currentIndex);
}
}
模板:
<div cdkDropList [cdkDropListData]="list.number" *ngFor="let list of lists" (cdkDropListDropped)="drop($event)">
{{list.number}}
<div cdkDrag [cdkDragData]="item" *ngFor="let item of list.amount">
{{item}}
</div>
</div>
解决方案
你应该得到你的列表项的实际索引。试试这个:
TS:
activeNumIndex: number;
enter(i) {
this.activeNumIndex = i;
}
drop(event: CdkDragDrop<string[]>) {
if (event.previousContainer === event.container) {
moveItemInArray(this.lists[this.activeNumIndex].amount, event.previousIndex, event.currentIndex);
} else {
transferArrayItem(event.previousContainer.data,
event.container.data,
event.previousIndex,
event.currentIndex);
}
}
HTML:
<div cdkDropList [cdkDropListData]="list.number" *ngFor="let list of lists; let i=index;" (cdkDropListDropped)="drop($event)">
{{list.number}}
<div cdkDrag [cdkDragData]="item" *ngFor="let item of list.amount" (mouseenter)="enter(i)" style="border:1px solid black">
{{item}}
</div>
</div>
推荐阅读
- mongodb - 如何在 MongoDB 中编写请求
- python - 使用 pip install 安装 tensorflow 时出错
- postgresql - jsonb文本搜索索引
- java - 如何在 spring junit 测试中禁用日志记录(错误除外)?
- angular - 无法使用角度访问属性
- react-native - 如何在 React Native iOS 中显示 webp 图像?
- jquery - Ruby on Rails 6 jquery and ajax dynamic form CRUD
- html - paragraph within a div at very bottom
- java - 如何在对象的 ArrayList 中搜索特定元素值?
- azure - Unable to retrieve Key Vault Secret from Docker App Service in .NET Core