A组件:
<template>
<div>
<test3 :data="testData1"></test3>
</div>
</template>
<script>
import Test3 from './test3'
export default {
name: 'Test1',
components: {
Test3
},
data() {
return {
testData1: {
title: 'test1',
list: [
{ id: 1, name: '张三', age: 10 },
{ id: 2, name: '李四', age: 11 },
{ id: 3, name: '王五', age: 12 }
]
}
}
}
}
</script>
B组件:
<template>
<div>
<test3 :data="testData2"></test3>
</div>
</template>
<script>
import Test3 from './test3'
export default {
name: 'Test2',
components: {
Test3
},
data() {
return {
testData2: {
name: 'test2',
list: [
{ id: 1, hobby: '游戏', duration: 2 },
{ id: 2, hobby: '动漫', duration: 1 },
{ id: 3, hobby: '小说', duration: 4 }
]
}
}
}
}
</script>
C组件:
<template>
<div>
<div>
<h1>
在 A 组件调用时 这里想渲染 title
在 B 组件调用时 这里想渲染 name
</h1>
<ul>
<li v-for="item in data.list" :key="item.id">
在 A 组件调用时 这里想渲染 name 和 age
<p>{{ item.name }} : {{ item.age }}</p>
在 B 组件调用时 这里想渲染 hobby 和 duration
<p>{{ item.hobby }} : {{ item.duration }}</p>
</li>
</ul>
</div>
</div>
</template>
<script>
export default {
name: 'Test3',
props: {
data: {
type: Object,
default: _ => {
return {}
}
}
}
}
</script>
使用具名插槽,用一个变量区分不同的插槽
在C组件定义一个变量来分区,标签通过v-if判断。
props 传入key
<li v-for="item in data.list" :key="item.id">
在 A 组件调用时 这里想渲染 name 和 age
<p>{{ item[key1] }} : {{ item[key2] }}</p>
在 B 组件调用时 这里想渲染 hobby 和 duration
<p>{{ item[key1] }} : {{ item[key2] }}</p>
</li>
以components引入已经实现了复用,你的props。
如果希望简洁点,可以多传入一个type,C组件根据props的type值进行展示。不想处理html,c页面中可以使用计算属性,根据不同的type处理。
其他没了
props: {
data: {
type: Object,
default: _ => {
return {}
}
},
type:{}
}
如果对您有帮助,请你点赞 + 采纳,这是对我最大的鼓励
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632