带你走进iView的穿梭框

双栏穿梭选择框,常用于将多个项目从一边移动到另一边。

 Transfer 组件主要基于以下四个 API 来使用:

:data:总体数据,数组,每项为一个对象,且必须含有 key 值,组件基于此做索引。
:target-keys:目标列索引集合,数组,每项为数据的 key 值,Transfer 会将含有这些 key 值的数据筛选到右边。
:render-format:每行数据显示的格式函数,默认优先显示 label 值,没有时显示 key ,可以自己组合出需要的数据格式。
@on-change:当点击转移按钮时,组件本身并不会转移数据,而是触发事件,由用户来操作数据。

示例如下:

<template>
  <div>
    <Transfer
      :data="unitMockData"
      :target-keys="unitTargetKeysData"
      filterable
      ref="unitTransfer"
      :list-style="listStyle"
      :render-format="render"
      :titles="unitTitles"
      :operations="operations"
      :filter-method="filterMethod"
      @on-change="handleChange">
        <div :style="{float: 'right', margin: '5px'}">
          <Button size="small">Refresh</Button>
        </div>
      </Transfer>
  </div>
</template>

<script>
export default {
  name: 'Transfer',
  data () {
    return {
      modalVisible: false,
      unitTitles: ['内容', '发布的内容'],
      operations: ['移除', '发布'],
      unitMockData: [
        { 'key': '10011', 'label': '内容-10011', 'desc': '111', 'disabled': false },
        { 'key': '10012', 'label': '内容-10012', 'desc': '222', 'disabled': true },
        { 'key': '10013', 'label': '内容-10013', 'desc': '333', 'disabled': false },
        { 'key': '10014', 'label': '内容-10014', 'desc': '444', 'disabled': false },
        { 'key': '10015', 'label': '内容-10015', 'desc': '555', 'disabled': false },
        { 'key': '10016', 'label': '内容-10016', 'desc': '666', 'disabled': false },
        { 'key': '10017', 'label': '内容-10017', 'desc': '777', 'disabled': false },
        { 'key': '10018', 'label': '内容-10018', 'desc': '888', 'disabled': false },
        { 'key': '10019', 'label': '内容-10019', 'desc': '999', 'disabled': false },
      ],
      unitTargetKeysData: ['10013'],
      listStyle: {
        width: '550px',
        height: '500px'
      }
    }
  },
  computed: {},
  methods: {
    render (item) {
      return item.label + ' - ' + item.desc
    },
    handleChange (newTargetKeys, direction, moveKeys) {
      if (direction === 'left') {
        // 移除
        let seqsData = this.compareArr(moveKeys, this.unitMockData, 'key')
        let seqs = ''
        for (let id of seqsData) {
          if (id === null) {

          } else if (seqs === '') {
            seqs = seqs + id
          } else {
            seqs = seqs + ',' + id
          }
        }
        // 删除
        console.log('移除', seqs)
      } else if (direction === 'right') {
        // 新增
        console.log('发布', moveKeys.join(','))
      }
      this.unitTargetKeysData = newTargetKeys
    },
    compareArr (arrayA, arrayB, val) {
      return arrayA.map(itemA => {
        const findItem = arrayB.find(itemB => itemB.key === itemA)
        if (val === 'key') {
          return findItem.key
        }
      })
    },
    filterMethod (data, query) {
      return data.label.indexOf(query) > -1
    }
  }
}
</script>

<style lang="less">

</style>

穿梭框高级用法,可以自定义两列的宽高、操作文案,以及底部自定义操作,更多配置见 API。

 Transfer props

属性说明类型默认值
data数据源,其中的数据将会被渲染到左边一栏中,targetKeys 中指定的除外。Array[]
targetKeys显示在右侧框数据的key集合Array[]
render-format每行数据渲染函数,该函数的入参为 data 中的项Function默认显示label,没有时显示key
selected-keys设置哪些项应该被选中Array[]
list-style两个穿梭框的自定义样式Object{}
titles标题集合,顺序从左至右Array['源列表', '目的列表']
operations操作文案集合,顺序从上至下Array[]
filterable是否显示搜索框Booleanfalse
filter-placeholder搜索框的占位String请输入搜索内容
filter-method自定义搜索函数,入参为 data 和 query,data 为项,query 为当前输入的搜索词Function默认搜索label
not-found-text当列表为空时显示的内容String列表为空

Transfer events

事件名说明返回值
on-change选项在两栏之间转移时的回调函数targetKeys, direction, moveKeys
on-selected-change选中项发生变化时触发sourceSelectedKeys, targetSelectedKeys

 

--------------如果大家喜欢我的博客,可以点击左上角的关注哦。 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值