有这样一个需求:
- 下拉框组件希望显示的内容是一个表格
- 回显只显示其姓名
- 选择框切换时父组件需要能拿到对应名字的一整行数据
如图:
问题分析:
需求其实很简单,主要利用 v-model
里的 @input
控制其回显和 @change
找到对应行的数据,这里主要说一下可能出现的问题:
- 如果后端返回的数据没有唯一值(可能出现重复值的情况),需要自行处理一下,给每一项绑定一个唯一值(下标)
- 当选择框组件有
clearable
属性时,@change
的值需要对空值进行处理一下
其他方面优化:
可以使用
v-bind="$attrs"
将父组件调用子组件时传入的属性展开(排除被 prop 注册、class、style)1
2
3
4
5
6<fu-input placeholder="请输入" maxlength="50" />
<!-- fu-input组件内部实现 -->
<input v-bind="$attrs" />
<!-- 上面代码渲染出的效果如下-->
<input placeholder="请输入" maxlength="50" />可以使用
v-on="$listeners"
将父组件调用子组件时传入的方法展开1
2
3
4
5
6<fu-input @focus="focus" @input="xxx" @change="xxx" />
<!-- fu-input组件内部实现 -->
<input v-on="$listeners" />
<!-- 上面代码渲染出的效果如下-->
<input @focus="focus" @input="xxx" @change="xxx" />组件上的 v-model 默认会利用名为 value 的 prop 和名为 input 的 event。可以使用
model
对其 prop 和 event 修改名字1
2
3
4<my-div v-model="someValue"></my-div>
<!-- 等价于 -->
<my-div :value="someValue" @input="someValue = $event"></my-div>
组件代码:
1 | <template> |
父组件代码:
1 | <el-form :model="listQuery" style="width: 300px" label-width="110px"> |