el-transfer的入门学习

el-transfer的入门学习

效果图

在这里插入图片描述
在这里插入图片描述

代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script src="https://unpkg.com/element-ui/lib/index.js"></script>
</head>
<body>
    <div id='app'>
        <el-transfer v-model='value' :data='data'></el-transfer>
        <el-transfer v-model='value1' :data='data1' filterable :filter-method='handleFilter'></el-transfer>
        <el-transfer 
        v-model='value2' 
        :data='data2'
        filterable
        :titles="['Source','Target']"
        :button-texts="['到左边','到右边']"
        :format="{noChecked:'${total}',hasChecked:'${checked}/${total}'}"
        @change='handleChange'
        >
            <el-button class='transfer-footer' slot='left-footer' size='small'>操作</el-button>
            <el-button class='transfer-footer' slot='right-footer' size='small'>操作</el-button>
        </el-transfer>
        <el-transfer 
        v-model='value2' 
        :data='data2' 
        filterable 
        :titles="['Source','Target']"
        :button-texts="['到左边','到右边']"
        :format="{noChecked:'${total}',hasChecked:'${checked}/${total}'}"
        @change='handleChange'>
            <!-- <span slot-scope='{option}'>{{option.key}} - {{option.label}}</span> -->
            <span slot-scope='scope'>{{scope.option.key}} - {{scope.option.label}}</span>
            <el-button class='transfer-footer' slot='left-footer' size='small'>操作</el-button>
            <el-button class='transfer-footer' slot='right-footer' size='small'>操作</el-button>
        </el-transfer>
        <el-transfer
        v-model='value3'
        :data='data3'
        :props="{key:'value',label:'desc'}"
        ></el-transfer>
    </div>
</body>
</html>
<style>
    .transfer-footer {
      margin-left: 20px;
      padding: 6px 5px;
    }
  </style>
<script>
    new Vue({
        el:'#app',
        data(){
            //key:唯一标识,label:显示文本,disabled:是否禁止转移
            const generateData = _=>{
                let data=[];
                for (let index = 1; index <= 10; index++) {
                    data.push(
                        {
                            key:index,
                            label:"备选项"+index,
                            disabled:index % 4 === 0
                        }
                    )
                }
                return data;
            };
            let generateData1 = _=>{
                let data=[]
                let city=['合肥','淮北','淮南','巢湖','芜湖','蚌埠']
                let pinyin=['hefei','huaibei','huainan','chaohu','wuhu','bengbu']
                city.forEach((value,index)=>{
                    data.push({
                        key:index,
                        label:value,
                        "pinyin":pinyin[index]
                    })
                })
                return data
            }
            let generateData2 = _=>{
                let data=[]
                for (let index = 1; index <= 15; index++){
                    data.push({
                        key:index,
                        label:"备选项"+index,
                        disabled:index%4===0
                    })
                }
                return data
            }
            let generateData3=_=>{
                let data=[]
                for (let index = 1; index <= 15; index++) {
                   data.push({
                       value:index,
                       desc:'备选项'+index
                   })
                }
                return data

            }
            return{
                value:[1,4],
                value1:[1,3],
                value2:[],
                value3:[],
                data:generateData(),
                data1:generateData1(),
                data2:generateData2(),
                data3:generateData3(),
            }
        },
        methods:{
            // query为搜索的值,item为数组元素,return为true,保留item
            handleFilter(query,item){
                return item.pinyin.indexOf(query) > -1
            },
            // value为value绑定的值,direction为转移方向,right/left,moveKeys为转移的itemKey数组
            handleChange(value,direction,movedKeys){
                console.log(value,direction,movedKeys)
            }
        }

    })
</script>

知识点

  1. el-transfer的基本属性,v-model:data,:data的值是[{key:1,label:'备选项1',disabled:false},{key:2,label:'备选项2',disabled:false}],其中,key是唯一标识,label为显示内容,disabled为是否可选中
  2. filterable属性可以通过搜索框搜索选项,设置filter-method可以自定义搜索事件,事件参数为(query,item),返回值为true,保留item,为false,则过滤
  3. titles可以自定义标题,button-texts可自定义按钮,format可自定义右上角的勾选状态
  4. slot-scope='{option}'配合{{option.key}} - {{option.label}}可自定义显示文本
  5. @change的参数为value,direction,moveKeys,分别对应v-model绑定的数据,方向,移动的key数组
  6. data中的属性为value,desc时,与key,label不匹配,可以设置:props="{key:'value',label:'desc'}"匹配显示

官网地址

el-transfer官网地址

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

自律最差的编程狗

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

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

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

打赏作者

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

抵扣说明:

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

余额充值