78 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Markdown
		
	
	
			
		
		
	
	
			78 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Markdown
		
	
	
<cn>
 | 
						||
#### 自定义渲染行数据
 | 
						||
自定义渲染每一个 Transfer Item,可用于渲染复杂数据。
 | 
						||
</cn>
 | 
						||
 | 
						||
<us>
 | 
						||
#### Custom datasource
 | 
						||
Custom each Transfer Item, and in this way you can render a complex datasource.
 | 
						||
</us>
 | 
						||
 | 
						||
```html
 | 
						||
<template>
 | 
						||
  <a-transfer
 | 
						||
    :dataSource="mockData"
 | 
						||
    :listStyle="{
 | 
						||
      width: '300px',
 | 
						||
      height: '300px',
 | 
						||
    }"
 | 
						||
    :targetKeys="targetKeys"
 | 
						||
    @change="handleChange"
 | 
						||
    :render="renderItem"
 | 
						||
  >
 | 
						||
  </a-transfer>
 | 
						||
</template>
 | 
						||
<script>
 | 
						||
export default {
 | 
						||
  data () {
 | 
						||
    return {
 | 
						||
      mockData: [],
 | 
						||
      targetKeys: [],
 | 
						||
    }
 | 
						||
  },
 | 
						||
  mounted() {
 | 
						||
    this.getMock()
 | 
						||
  },
 | 
						||
  methods: {
 | 
						||
    getMock() {
 | 
						||
      const targetKeys = [];
 | 
						||
      const mockData = [];
 | 
						||
      for (let i = 0; i < 20; i++) {
 | 
						||
        const data = {
 | 
						||
          key: i.toString(),
 | 
						||
          title: `content${i + 1}`,
 | 
						||
          description: `description of content${i + 1}`,
 | 
						||
          chosen: Math.random() * 2 > 1,
 | 
						||
        };
 | 
						||
        if (data.chosen) {
 | 
						||
          targetKeys.push(data.key);
 | 
						||
        }
 | 
						||
        mockData.push(data);
 | 
						||
      }
 | 
						||
      this.mockData = mockData
 | 
						||
      this.targetKeys = targetKeys
 | 
						||
    },
 | 
						||
    renderItem(item) {
 | 
						||
      const customLabel = (
 | 
						||
        <span class="custom-item">
 | 
						||
          {item.title} - {item.description}
 | 
						||
        </span>
 | 
						||
      );
 | 
						||
 | 
						||
      return {
 | 
						||
        label: customLabel, // for displayed item
 | 
						||
        value: item.title, // for title and filter matching
 | 
						||
      };
 | 
						||
    },
 | 
						||
    handleChange(targetKeys, direction, moveKeys) {
 | 
						||
      console.log(targetKeys, direction, moveKeys);
 | 
						||
      this.targetKeys = targetKeys
 | 
						||
    },
 | 
						||
  },
 | 
						||
}
 | 
						||
</script>
 | 
						||
```
 | 
						||
 | 
						||
 | 
						||
 |