element ui树组件render-content 树节点的内容区的渲染另一种方式

18 篇文章 0 订阅
2 篇文章 0 订阅

直接上代码吧,不用h的写法。

 <el-tree :data="data" node-key="id" default-expand-all :expand-on-click-node="false" :props="defaultProps"
   :render-content="renderContentTree" @node-click="handleNodeClick">
 </el-tree>
import logoImg from '图片路径'
data() {
  return {
  	 	data: [
        {
          id: 1,
          point: 'yi',
          label: '一级 1',
          children: [
            {
              id: 4,
              point: 'er',
              label: '二级 1-1',
              children: [
                {
                  id: 9,
                  point: 'san',
                  label: '三级 1-1-1'
                },
                {
                  id: 10,
                  point: 'san',
                  label: '三级 1-1-2'
                }
              ]
            }
          ],
        },
        {
          id: 2,
          point: 'yi',
          label: '一级 2',
          children: [
            {
              id: 5,
              point: 'er',
              label: '二级 2-1',
              children: [{
                id: 20,
                point: 'sn',
                label: 'sanji 333',
              }]
            },
            {
              id: 6,
              point: 'er',
              label: '二级 2-2'
            }
          ]
        },
        {
          id: 3,
          point: 'yi',
          label: '一级 3',
          children: [
            {
              id: 7,
              point: 'er',
              label: '二级 3-1',
              children: [{
                id: 20,
                point: 'san',
                label: 'sanji 333',
              },
              {
                id: 22,
                point: 'san',
                label: 'sanji 444'
              }
              ],
            },
            {
              id: 8,
              point: 'er',
              label: '二级 3-2'
            }
          ]
        }
      ],
   }
},
methods: {
renderContentTree(h, { node, data, store }) {
  console.log('h', h);
  console.log(node.point, node.label, data, store);
  return (
    <span class="custom-tree-node">
      {data.point == 'san' ?
        <span
          on-click={ ($event) => this.handelclcik($event,data) }
          class='class_aweda'
        >
          <img src={logoImg} alt="" srcset=""></img>
        </span> :
        <span></span>
      }
      <span>
      <span>{data.label}</span>
        </span>
    </span>);
    },
    handleNodeClick() {
      alert(1)
    },
    handelclcik(e, data) {
    // 会冒泡,所以禁止了一下
      e.stopPropagation();
      e.preventDefault();
      console.log(data);
    },
},

我个人理解就是jsx的写法,和react一样。也是return的模板。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
您可以通过修改 Element UI Tree 组件节点模板来实现单选和禁止选择其他节点的功能。首先,您需要在 tree 组件上设置 `show-checkbox` 属性为 `true`,以显示节点前的复选框。接下来,在节点模板中添加一个单选框,将其绑定到节点的 `selected` 属性上,以实现单选功能。最后,在节点渲染函数中,判断节点是否为指定节点,如果不是则禁止选择。 以下是一个示例代码: ```html <template> <el-tree :data="data" show-checkbox :node-key="nodeKey" :props="defaultProps" :render-content="renderContent" @check-change="handleCheckChange" ></el-tree> </template> <script> export default { data() { return { data: [ { id: 1, label: 'Node 1', selected: false, children: [ { id: 2, label: 'Node 1-1', selected: false, forbidden: true }, { id: 3, label: 'Node 1-2', selected: false, forbidden: false } ] }, { id: 4, label: 'Node 2', selected: false, children: [ { id: 5, label: 'Node 2-1', selected: false, forbidden: false }, { id: 6, label: 'Node 2-2', selected: false, forbidden: false } ] } ], nodeKey: 'id', defaultProps: { children: 'children', label: 'label' } } }, methods: { renderContent(h, { node, data }) { if (data.forbidden) { // 禁止选择 return <span>{ data.label }</span> } else { // 单选框 return ( <span> <el-checkbox v-model={ data.selected }></el-checkbox> { data.label } </span> ) } }, handleCheckChange(data, checked) { if (checked) { // 取消其他节点的选择状态 this.data.forEach(item => { if (item.id !== data.id) { item.selected = false } if (item.children) { item.children.forEach(child => { if (child.id !== data.id) { child.selected = false } }) } }) } } } } </script> ``` 在上面的示例代码中,我们为节点添加了一个 `selected` 属性,用于存储节点是否被选中的状态。同时,我们还为其中一个节点设置了 `forbidden` 属性,用于指定该节点是否禁止选择。在节点渲染函数中,如果节点被禁止选择,则只显示节点的文本内容;否则,显示一个单选框和节点的文本内容,将单选框的值绑定到节点的 `selected` 属性上。 在 `check-change` 事件的处理函数中,我们判断节点是否被选中,如果被选中,则取消其他节点的选择状态。注意,为了实现单选功能,我们需要确保在任何时候只有一个节点被选中。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

好苦呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值