xw-drag-drop-layout v0.9.1
xw-drag-drop-layout
Vue实现的拖拽布局组件
使用说明
- 安装
npm i xw-drag-drop-layout
- 入口文件中引入组件定义
import 'xw-drag-drop-layout'
import 'xw-drag-drop-layout/dist/xw-drag-drop-layout.css'
- 使用
<xw-drag-drop-layout></xw-drag-drop-layout>
参数说明
参数 | 说明 | 类型 | 默认值 | 是否必须 |
---|---|---|---|---|
defaultList | 拖拽节点列表 | Array\<draggerNode> | [] | true |
defaultDraggerMargin | 拖拽节点之间的间距 | number | 5 | false |
defaultCols | 水平方向网格数量 | number | 36 | false |
defaultCanExceedHorizontalViewingArea | 拖拽节点是否可超出水平可视区域 | boolean | false | false |
defaultShowGridLine | 是否展示网格线 | boolean | false | false |
defaultAnimation | 是否启动拖拽动画 | boolean | true | false |
defaultCanvasMode | 画布模式 | 'preview' | 'design' | 'preview' | false |
defaultCanOverlap | 是否可重叠 | boolean | false | false |
theme | 主题 | 'xw-white' | 'xw-black' | 'xw-white' | false |
change | 节点列表发生变化回调 | EventEmitter<draggerNode[]> | - | - |
drag-node-detail | 编辑节点回调 | EventEmitter | - | - |
drag-node-export | 拖拽节点回调 | EventEmitter | - | - |
defaultUsage | 使用方式 | string | 'dashboard' | 'generator' | false |
方法说明
setState(states: DragLayoutContainer.states): void
设置xw-drag-drop-layout组件状态,比如:
this.dragLayoutContainerRef.setState({ draggerMargin: 5, cols: 36, canExceedHorizontalViewingArea: true, showGridLine: true, animation: true })
appendDraggerNode(node: draggerNode): void
添加拖拽节点,比如:
this.dragLayoutContainerRef.appendDraggerNode({ id: uuidv4(), comp: 'XanwayEmpty', w: 2, h: 4 })
initOutsideDragNode(node: draggerNode): void
添加从外部拖拽进入画布的节点,比如:
this.$refs.dragLayoutContainer.initOutsideDragNode( { comp: { tag: 'XanwayEmpty', data: { props: { meta: { a: 1, b: 2, c: 3 } } } }, w: 5, h: 3 } )
类型说明
拖拽节点类型draggerNode
// contentVNode类型与vue中createElement的参数对象类型对应 interface contentVNode { tag: string; data?: VNodeData; children?: VNodeChildren; }
interface draggerNode {
id: string; // 唯一标识
title: string; // 标题
comp: contentVNode; // 内容组件对象
x: number; // 拖拽节点左上角横坐标网格索引
y: number; // 拖拽节点左上角纵坐标网格索引
w: number; // 拖拽节点宽度(占据网格数)
h: number; // 拖拽节点高度(占据网格数)
}
// from vue.d.ts
interface VNodeData {
key?: string | number;
slot?: string;
scopedSlots?: { [key: string]: ScopedSlot | undefined };
ref?: string;
refInFor?: boolean;
tag?: string;
staticClass?: string;
class?: any;
staticStyle?: { [key: string]: any };
style?: string | object[] | object;
props?: { [key: string]: any };
attrs?: { [key: string]: any };
domProps?: { [key: string]: any };
hook?: { [key: string]: Function };
on?: { [key: string]: Function | Function[] };
nativeOn?: { [key: string]: Function | Function[] };
transition?: object;
show?: boolean;
inlineTemplate?: {
render: Function;
staticRenderFns: Function[];
};
directives?: VNodeDirective[];
keepAlive?: boolean;
}
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago