通用组件:
<view v-for="(item,index) in list" :key="index">{{}}
</view>
父组件1:
list:[{name:123},{name:456}]
父组件2:
list:[{id:111},{id:222}]
两个页面中传到子组件的list中key不一样,我子组件应该如何取到父组件传过来的value值呢
通用组件:
<view v-for="(item,index) in list" :key="index">{{}}
</view>
父组件1:
list:[{name:123},{name:456}]
父组件2:
list:[{id:111},{id:222}]
两个页面中传到子组件的list中key不一样,我子组件应该如何取到父组件传过来的value值呢
首先我们需要明确问题,
1.key 用的是 index,数组长度都是 2,所以传递其实是一样的
2.如果是数据格式,推荐在 computed 里面统一掉
下面是简单的格式转换,没问题吧?
formatData(){
return [{id:1}].concat([{name:2}]).map(item => return {
code: item.id || item.name,
...item
})
}
其实就看列表展示,你的key
直接用index
其实是没啥问题,也不需要特意处理。但是展示内容就不一样了,一个用name
,一个用id
,这样就需要处理一下了
// 封装的组件
props: {
list: {
type: Array,
default: function() {
return []
}
},
formatKey: {
type: String,
default: ''
},
formatValue: {
type: String,
default: ''
}
},
computed: {
formatList() {
const newList = this.list.map((item, index) => {
return {
uid: item[this.formatKey] || index,
value: item[this.formatValue] || item.name,
...item
}
})
return newList
}
}
// 封装组件使用
<c-component list="dataList" format-key="id" />
<c-component list="dataList" format-value="name" />
10 回答11.1k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
3 回答5.1k 阅读✓ 已解决
3 回答1.8k 阅读✓ 已解决
2 回答4.7k 阅读✓ 已解决
方案1. 父组件把数据整理一下,按照要求传进去
方案2. 再增加一个参数告知通用组件该使用什么 key