vxe-table 可编辑渲染 edit-render 自定义组件以及触发事件

本文介绍了如何在VXETable中创建自定义渲染器my_inputModal_edit_Renderer,该渲染器用于在表格编辑时展示一个弹出模态框,包含一个可编辑的文本区域。myinputModal.vue组件包含了输入框和弹出的文本域,允许用户进行多行编辑。通过监听事件和传递参数,实现了数据的双向绑定和更新。
摘要由CSDN通过智能技术生成

实现效果:

实现步骤:

1.创建vxetableRenderer.js文件

//vxetableRenderer.js
//导入
import VXETable from 'vxe-table';
//自定义组件(后面给出组件内代码)
import myinputModal from '@/components/render/myinputModal.vue';
//添加自定义的渲染 名字叫my_inputModal_edit_Renderer
VXETable.renderer.add('my_inputModal_edit_Renderer',{
	autofocus: '.vxe-input--inner',
	renderEdit (h, renderOpts, params){
		let { row, column } = params;
		//events 里是传过来的事件
		let { events } = renderOpts;
		//通过column的参数控制是否使用
		if(column.params.inputModal){
		    //使用on事件名获取事件
			return <myinputModal params={params} onchange={(obj)=>events.change(obj)}></myinputModal>
		}else{
			return <vxe-input onchange={({value, $event})=>events.change({row,column,value})} v-model={row[column.field]} size="small">
			</vxe-input>
		}
	},
})

2.创建myinputModal.vue文件

//myinputModal.vue
<template>
	<div class="edit-down-modal">
		<vxe-input @change="inputChange" ref="cellinput" v-model="row[column.field]" size="small">
		 	<template slot="suffix"><i class="vxe-icon-ellipsis-v" style="cursor: pointer;" @click="showModal"></i></template>
		</vxe-input>
		
		<!-- 这里的弹出框不能添加transfer属性 -->
		<vxe-modal :title="column.title" show-footer @close="closeEvent" @confirm="confirmEvent" v-model="visible"  
		width="1000" height="580" show-zoom resize min-height="100" min-width="100" :margin-size="-300" :escClosable="true">
			<template #default>
				<vxe-textarea 
				 v-model="textareaValue" show-word-count resize="vertical"
				  :autosize="{minRows:20,maxRows:20}">
				</vxe-textarea>
			</template>
		</vxe-modal>
		
	</div>
</template>

<script>
	export default{
		props:{
			//传入的参数
			params:{type:Object,default:()=>{
				return {}
			}},
		},
		data() {
			return{
				textareaValue:"",
				visible:false,
				row:{},
				column:{params:{}},
			}
		},
		watch:{
			visible(nval){
				if(nval){
					this.textareaValue=this.row[this.column.field]||'';
				}
			}
		},
		mounted(){
		    //在这里拿到行和列就好操作了
			if(this.params){
				//行
				this.row=this.params.row;
				//列
				this.column=this.params.column;
			}
		},
		methods:{
			inputChange({value, $event}){
				//触发事件
				this.$emit("change",{row:this.row,column:this.column,value});
			},
			showModal(){
				this.visible=true;
			},
			//点击确定按钮
			confirmEvent(){
			    //改变值
				this.params.row[this.params.column.field]=this.textareaValue;
				this.inputChange({value:this.textareaValue});
			},
			//点击关闭按钮
			closeEvent(){
				this.textareaValue="";
			},
		}
	}
</script>

<style>
</style>

3.使用自定义渲染

3.1在main.js文字中导入vxetableRenderer.js文件。

//我的是创建在根目录的config下,所以@/config/vxetableRenderer.js
import '@/config/vxetableRenderer.js';

3.2在你的列配置中使用

//editRender对象中,name为渲染器名字,events为事件
methods:{
    init(){
        let columns=[
         {width:80,field:"id",title:"id",params:{inputModal:false},editRender:{name:"my_inputModal_edit_Renderer",events:{change:this.inputModalChange}}},
         {width:80,field:"name",title:"姓名",params:{inputModal:true},editRender:{name:"my_inputModal_edit_Renderer",events:{change:this.inputModalChange}}}
        ];
		this.$refs.xGrid.loadColumn(columns);
    },
    inputModalChange(obj){
        console.log("值发生改变",obj);
    }
}

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
vxe-table中嵌套vxe-table时,内层的vxe-table可以通过作用域插槽(scoped slot)来获取外层vxe-table的row数据。具体步骤如下: 1. 在外层vxe-table的列定义中,使用作用域插槽(scoped slot)来传递row数据给内层vxe-table。例如,可以在外层vxe-table的列定义中添加一个自定义列,并使用作用域插槽将row数据传递给内层vxe-table,如下所示: ```html <vxe-table :data="outerData"> <vxe-column type="index" width="60"></vxe-column> <vxe-column field="name" title="Name"></vxe-column> <vxe-column title="Nested Table"> <template #default="{ row }"> <vxe-table :data="row.nestedData"> <!-- 内层vxe-table的列定义 --> </vxe-table> </template> </vxe-column> </vxe-table> ``` 2. 在内层vxe-table的列定义中,可以通过作用域插槽(scoped slot)的方式获取外层vxe-table传递的row数据。例如,可以在内层vxe-table的列定义中使用作用域插槽来访问外层vxe-table的row数据,如下所示: ```html <vxe-table :data="nestedData"> <vxe-column field="nestedField1" title="Nested Field 1"></vxe-column> <vxe-column field="nestedField2" title="Nested Field 2"></vxe-column> <vxe-column title="Outer Row Data"> <template #default="{ $table }"> <!-- 使用 $table.$scoped.row 获取外层vxe-table的row数据 --> <span>{{ $table.$scoped.row }}</span> </template> </vxe-column> </vxe-table> ``` 通过以上步骤,内层的vxe-table就可以获取到外层vxe-table的row数据,并进行相应的操作。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值