第三方组件及计算属性传参的问题解决方式

发布时间 2023-11-09 09:43:44作者: 一米五怎么你了

1. 前言

唉,好想玩滋嘣。

2. 计算属性直接传参接收不到

表格数据某一列需要用的计算属性时,模板中使用计算属性 fullName 就会直接调用 fullName 函数,而在模板中 fullName(item) 相当于fullName()(item),此处为函数柯里化。

<el-table-column label="名称" align="center" min-width="20%">
<template slot-scope="scope">
  <p
	v-for="(item, index) in scope.row.dataList "
	:key="item.id"
>
	{{ fullName(item) }}
  </p>
</template>
</el-table-column>
// ...
computed: {
// fullName(param) 里接收到的是组件实例对象!
	fullName() {
		return item=> {
			return item.firstName + item.lastName
		}
	}
}

3. 第三方组件的事件想要传参会立即执行且会被覆盖问题

封装好的组件的事件回调函数想要传其它参数,事件的回调直接写:before-upload="beforeUpload('a')" ,不仅会立即执行,还会覆盖默认参数;解决的方式类似:

<el-form-item label="文件:">
  <el-upload
	:action=""
	:before-upload="beforeUpload('a')"
	:file-list="fileList"
>
	<el-button size="small" type="primary">点击上传</el-button>
  </el-upload>
</el-form-item>
// ...
// 上传文件前
beforeUpload(myParams) {
  return file => {
	console.log(file, myParams);
  };
},

:before-upload="beforeUpload('a')",引号内为事件的回调,应该是一个函数,而不是函数的执行,但这里我们执行 beforeUpload 接收想要传递的参数,并直接返回一个函数,作为新的事件回调,沿着作用域链就可以拿到 myParams 啦。