ng-zorro|angular+ng-zorro表格拖拽
angular集成了cdk drag-drop 来实现拖拽功能
app.modules.ts导入
import { DragDropModule } from '@angular/cdk/drag-drop';
imports: [
DragDropModule
]
一、表格内拖拽排序
工序描述
标准工时(分钟)
工序级别
{{ data.desc }}
{{ data.sam }}
{{ data.grade }}
import {moveItemInArray, transferArrayItem, copyArrayItem, CdkDragDrop} from '@angular/cdk/drag-drop';
sourceData = https://www.it610.com/article/[{'id': 1,
'desc ': 'string',
'sam': 1,
'grade': 1,
'price': 0
}, {
'id': 2,
'desc ': 'string',
'sam': 2,
'grade': 2,
'price': 21
}, {
'id': 3,
'desc ': 'string',
'sam': 3,
'grade': 3,
'price': 3
}];
drop(event: CdkDragDrop[]>) {
moveItemInArray(event.container.data, event.previousIndex, event.currentIndex);
}
【ng-zorro|angular+ng-zorro表格拖拽】
文章图片
二、表间拖拽 1、表间相互拖拽无限制
序号
工序描述
标准工时(分钟)
工序级别
标准工价(元)
操作
{{ i+1 }}
{{ data.desc }}
{{ data.sam }}
{{ data.grade }}
{{ data.price }}
工序描述
标准工时(分钟)
工序级别
{{ data.desc }}
{{ data.sam }}
{{ data.grade }}
import {moveItemInArray, transferArrayItem, copyArrayItem, CdkDragDrop} from '@angular/cdk/drag-drop';
targetData = https://www.it610.com/article/[{'id': null,
'desc': null,
'sam': null,
'grade': null,
'price': null
}];
sourceData = https://www.it610.com/article/[{'id': 1,
'desc ': 'string',
'sam': 1,
'grade': 1,
'price': 0
}, {
'id': 2,
'desc ': 'string',
'sam': 2,
'grade': 2,
'price': 21
}, {
'id': 3,
'desc ': 'string',
'sam': 3,
'grade': 3,
'price': 3
}];
drop(event: CdkDragDrop[]>) {
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);
// 表间数据复制,功能:将源表的数据通过拖拽复制到目标表中,源表中不删除
// copyArrayItem(event.previousContainer.data, event.container.data, event.previousIndex, event.currentIndex);
/**
* 针对目标表必须存在至少一条数据,解决方案一:初始一条空数据,有数据移入时,删除空数据
*/
this.targetData.forEach((item) => {
if (item.id === null) {
this.targetData.splice(this.targetData.indexOf(item), 1);
}
});
}
}
// 删除
delete(index) {
/**
* 针对目标表必须存在至少一条数据,解决方案一:当删除最后一条数据时,增加一条空数据
*/
this.targetData.splice(index, 1);
if (this.targetData.length === 0) {
const data = https://www.it610.com/article/{
id: null,
desc: null,
sam: null,
grade: null,
price: null
};
this.targetData.splice(0, 0, data);
}
}
注意点:
目标表必须至少存在一条数据,若为空,则无法进行表间拖拽,其拖拽会被认为为表内拖拽
2、表间拖拽有限制,源表只出不进
序号
工序描述
标准工时(分钟)
工序级别
标准工价(元)
操作
{{ i+1 }}
{{ data.desc }}
{{ data.sam }}
{{ data.grade }}
{{ data.price }}
工序描述
标准工时(分钟)
工序级别
{{ data.desc }}
{{ data.sam }}
{{ data.grade }}
import {moveItemInArray, transferArrayItem, copyArrayItem, CdkDragDrop} from '@angular/cdk/drag-drop';
targetData = https://www.it610.com/article/[{'id': null,
'desc': null,
'sam': null,
'grade': null,
'price': null
}];
sourceData = https://www.it610.com/article/[{'id': 1,
'desc ': 'string',
'sam': 1,
'grade': 1,
'price': 0
}, {
'id': 2,
'desc ': 'string',
'sam': 2,
'grade': 2,
'price': 21
}, {
'id': 3,
'desc ': 'string',
'sam': 3,
'grade': 3,
'price': 3
}];
drop(event: CdkDragDrop[]>) {
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);
// 表间数据复制,功能:将源表的数据通过拖拽复制到目标表中,源表中不删除
// copyArrayItem(event.previousContainer.data, event.container.data, event.previousIndex, event.currentIndex);
/**
* 针对目标表必须存在至少一条数据,解决方案一:初始一条空数据,有数据移入时,删除空数据
*/
this.targetData.forEach((item) => {
if (item.id === null) {
this.targetData.splice(this.targetData.indexOf(item), 1);
}
});
}
}
// 删除
delete(index) {
/**
* 针对目标表必须存在至少一条数据,解决方案一:当删除最后一条数据时,增加一条空数据
*/
this.targetData.splice(index, 1);
if (this.targetData.length === 0) {
const data = https://www.it610.com/article/{
id: null,
desc: null,
sam: null,
grade: null,
price: null
};
this.targetData.splice(0, 0, data);
}
}
// 不让其他list里面的数据移入到这个里面来
noReturnPredicate() {
return false;
}
注:通过cdkDropListEnterPredicate来设置进入限制
详情请见官网:https://material.angular.io/cdk/drag-drop/examples
推荐阅读
- 1040表格和W-2表格
- 教你如何做一个好看的表格,excel使用技巧大全
- 前端页面表格控件handsontable在vue项目中的应用
- 2020-05-24怎样删除表格里的文字只保留数字
- 6、bootstrap-表格
- 拖拽插件sortable.js之el-table表格拖拽效果代码
- UI框架系列-table
- 从服务端生成Excel电子表格(Node.js+SpreadJS)
- 太漂亮了 , 输出好看的表格,就用这个 Python 库
- Vue中将json数据导出为Excel表格