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

  • 第三方组件及计算属性传参的问题解决方式已关闭评论
  • 103 次浏览
  • A+
所属分类:Web前端
摘要

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


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 啦。