Element Tree组件,自定义节点,并设置事件

使用 scoped slot添加子节点

最后效果如图

主要是用到dom的节点控制。

$event.currentTarget.firstElementChild.nextElementSibling.setAttribute(
        "class",
        "set_new_class"
      );

通过对节点的控制,点击文本时,给el-icon-success对号图标添加set_new_class样式。控制颜色和位置的变化。

Element 组件html代码

<el-input
        placeholder="输入关键字进行过滤"
        v-model="filterText"
        clearable>
      </el-input>
      <el-tree
      :data="treeDemodata"
      show-checkbox
      node-key="id"
      ref="demoTree"
      default-expand-all
      :expand-on-click-node="false"
      :filter-node-method="filterDemo">
      <div style="width:100%;" slot-scope="{ node, data }" @click="showAlert(data, $event)">
        <span>{{ node.label }} </span>
        <span><i class="el-icon-success"></i></span>
        <span>
          <el-button
            type="text"
            size="mini"
            @click="() => append(data)">
            <i class="el-icon-plus"></i>
          </el-button>
          <el-button
            type="text"
            size="mini"
            @click="() => remove(node, data)">
            <i class="el-icon-close"></i>
          </el-button>
        </span>
      </div>
    </el-tree>

添加js控制

let id = 1000;
export default Vue.extend({
    data:{
        return:{
        filterText:'',
      treeDemodata:[{
        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'
        }]
      }],
        }
    },
    watch:{
        filterText(val) {
          this.$refs.demoTree.filter(val);
        }
    },
    methods:{
    showAlert(data, $event){
      console.log(data, $event)
      $event.currentTarget.firstElementChild.nextElementSibling.setAttribute(
        "class",
        "set_new_class"
      );
      this.$message("Please")
    },
    filterDemo(value, data){
      if (!value) return true;
      return data.label.indexOf(value) !== -1;
    },
    append(data) {
      const newChild = { id: id++, label: 'testtest', children: [] };
      if (!data.children) {
        this.$set(data, 'children', []);
      }
      data.children.push(newChild);
    },
    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);
    },
}
})

添加set_new_class类样式设置

.set_new_class{
  color:red;
  float:right;
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是生成 Element UI Tree 组件美化的代码,你可以根据需要自行调整样式: ```html <template> <el-tree :data="data" :props="defaultProps" node-key="id" show-checkbox default-expand-all :indent="20" highlight-current class="custom-tree" > <template #default="{ node, data }"> <span class="custom-tree-node"> <span class="custom-tree-node-label">{{ node.label }}</span> <span class="custom-tree-node-actions"> <el-button type="text" icon="el-icon-plus" size="mini"></el-button> <el-button type="text" icon="el-icon-edit" size="mini"></el-button> <el-button type="text" icon="el-icon-delete" size="mini"></el-button> </span> </span> </template> </el-tree> </template> <style scoped> .custom-tree { border: 1px solid #ebeef5; border-radius: 4px; background-color: #f2f6fc; padding: 10px; } .custom-tree-node { display: flex; align-items: center; justify-content: space-between; padding: 5px 10px; margin: 5px 0; border-radius: 4px; background-color: #fff; } .custom-tree-node-label { font-weight: bold; } .custom-tree-node-actions { display: flex; align-items: center; } .custom-tree-node-actions button { margin-left: 5px; padding: 0; } .custom-tree-node-actions button:hover { color: #409eff; } </style> ``` 解释: - `class="custom-tree"`:给树组件添加一个自定义的类名,方便样式定制。 - `template #default`:自定义节点的显示方式,包括节点的文本和操作按钮。 - `.custom-tree`:设置组件的样式,包括边框、背景色和内边距等。 - `.custom-tree-node`:设置节点的样式,包括背景色、边距和圆角等。 - `.custom-tree-node-label`:设置节点文本的样式,包括加粗。 - `.custom-tree-node-actions`:设置操作按钮的样式,包括显示方式和对齐方式。 - `.custom-tree-node-actions button`:设置操作按钮的样式,包括间距和内边距。 - `.custom-tree-node-actions button:hover`:设置按钮的鼠标悬停样式,包括颜色。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值