搜尋

首頁  >  問答  >  主體

javascript - antd 的Tree組件,是否支援拖曳限制

在Tree元件拖曳的時候,想限制父節點不能拖曳到子節點這一層,意思是限制只能子節點往上拉。這個可以antd支援嗎?

ringa_leeringa_lee2797 天前970

全部回覆(1)我來回復

  • PHP中文网

    PHP中文网2017-05-19 10:34:01

    最終的渲染只在於資料是怎麼樣的,在資料的改變在於你自己的控制啊,允許不允許,不過是資料是否改變而已了。

    例如下面的程式碼, 子节点 只能放到 第三个 下面,不能放到 第一个 下面(因為我的邏輯就是這樣的)。

    import * as React from 'react';
    import {BaseComponent} from '../base';
    import Tree from 'antd/lib/tree';
    const TreeNode = Tree.TreeNode;
    import 'antd/lib/tree/style/index.css';
    
    
    export interface HeaderProps { }
    export interface HeaderState { data: any }
    
    export class Header extends BaseComponent<HeaderProps, HeaderState> {
        state = {
            data: [
                {name: '第一个', key: 'a'},
                {name: '第二个', key: 'b',
                    children: [
                        {name: '子节点', key: 'd'}
                    ]},
                {name: '第三个', key: 'c'}
            ]
        };
    
        constructor(props:HeaderProps) {
            super(props);
        }
    
        onDragEnter(opt){
            console.log(opt, 'x');
        }
    
        onDrop(opt){
            const fromNode = opt.dragNode.props.eventKey;
            const toNode = opt.node.props.eventKey;
            if(toNode !== 'c'){ return }
            this.state.data[2]['children'] = this.state.data[1]['children'];
            this.state.data[1]['children'] = [];
            this.setState({});
        }
    
        loop(data){
            return data.map( d => {
                if(d.children && d.children.length){
                    return <TreeNode key={d.key} title={d.name}>{this.loop(d.children)}</TreeNode>
                } else {
                    return <TreeNode key={d.key} title={d.name}></TreeNode>
                }
            })
        }
    
        render() {
            return (<p>
                <Tree className="draggable-tree"
                    draggable
                    onDragEnter={this.onDragEnter.bind(this)}
                    onDrop={this.onDrop.bind(this)}>
                    {this.loop(this.state.data)}
                </Tree>
            </p>)
        }
    }
    

    回覆
    0
  • 取消回覆