vue2+element-plus tree树形控件添加、删除、编辑

环境:vue2+element-plus
需求:tree树形控件添加、删除、编辑
描述:tree树形控件自带添加、删除,却没有编辑功能,应该怎样如何实现呢?
代码:

template 

<div id="index" >
  <el-tree
          :data="data"
          show-checkbox
          node-key="id"
          default-expand-all
          :expand-on-click-node="false"
          :render-content="renderContent">
  </el-tree>
</div>

script
--data数据--append()--remove()--renderContent()(其实都是element直接扒下来的,哈哈)
编辑功能请看代码 edit()

<script>

  let id = 1000;

  export default {
    name: 'index',
    data() {
      const data = [{
        id: 1,
        label: '一级 1',
        children: [{
          id: 4,
          label: '二级 1-1',
          children: [{
            id: 9,
            label: '三级 1-1-1'
          }, {
            id: 10,
            label: '三级 1-1-2'
          }]
        }]
      }, {
        id: 2,
        label: '一级 2',
        children: [{
          id: 5,
          label: '二级 2-1'
        }, {
          id: 6,
          label: '二级 2-2'
        }]
      }, {
        id: 3,
        label: '一级 3',
        children: [{
          id: 7,
          label: '二级 3-1'
        }, {
          id: 8,
          label: '二级 3-2'
        }]
      }];
      return {
        data: JSON.parse(JSON.stringify(data)),
      }
    },
    methods:{
        
        //添加()
        append(data) {
          const newChild = { id: id++, label: 'testtest', children: [] };
          if (!data.children) {
            data.children = []
          }
          data.children.push(newChild);
          this.data = [...this.data]
        },

        //删除
        remove(node, data) {
          const parent = node.parent;
          const children = parent.data.children || parent.data;
          const index = children.findIndex(d => d.id === data.id);
          children.splice(index, 1);
          this.data = [...this.data]
        },

        //编辑(data.label="赋值")
        edit(data){
          this.$prompt('', '请输入标题', {
            confirmButtonText: '确定',
            cancelButtonText: '取消',
          }).then(({ value }) => {
            if(value!=null){
              data.label=value
            }
          }).catch(() => {
          });
        },

        renderContent(h, { node, data, store }) {
          return h("span", {class: "custom-tree-node"},
              h("span", null, node.label),
              h("span", null,
                  h("a", {
                      onClick: () => this.append(data)
                  }, " 添加 "),
                  h("a", {
                      onClick: () => this.remove(node, data, store)
                  }, " 删除 "),
                  h("a", { 
                      onClick: () => this.edit(data)
                  }, ' 编辑 '),
              )
          );
        }
    }
  }
</script>

此时tree树形控件添加、删除、编辑功能都已实现
--------------------------------------------------------------------------------------

附加美化功能:

对应编辑、添加,编辑

renderContent(h, { node, data, store }) {
    return h("div", {class: "list"},
        h("span", {class: "title"},
            h("a", {
                onClick: () => this.onTitle(data)
            }, node.data.titleName),
        ),
        h("span", {class: "edit"},
            h("a", {
                onClick: () => this.edit(data)
            }, <i class="el-icon-edit"></i>),
            h("a", {
                onClick: () => this.append(data)
            }, <i class="el-icon-plus"></i>),
            h("a", {
                onClick: () => this.remove(node, data, store)
            }, <i class="el-icon-minus"></i>),

        )
    );
}

还有箭头等美化,属于css前端,可百度搜索...

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值