vue前端开发自学,插槽练习,同时渲染父子组件的数据信息!
如果想在slot插槽出口里面,同时渲染出来,来自父组件的数据,和子组件自身的数据呢。又有点绕口了。vue官方给的解决办法是。需要借助于,父组件的自定义属性。
<template>
<h3>App</h3>
<!-- <SlotBase>
<div>
<h3>标题</h3>
<p>内容</p>
</div>
</SlotBase> -->
<!-- <SlotTwo>
<template v-slot:header>
<h3>我是动态数据,{{message}}</h3>
</template>
<template v-slot:main>
<h4>我是静态内容来自插槽002</h4>
</template>
</SlotTwo> -->
<SlotThr>
<template #header="slotProps" >
<h3>{{currentTest}}--{{ slotProps.msg }}</h3>
</template>
<hr>
<template #main="slotProps">
<p>{{ slotProps.job }}</p>
</template>
</SlotThr>
</template>
<script>
import SlotBase from './components/SlotBase.vue'
import SlotTwo from "./components/SlotTwo.vue"
import SlotThr from './components/SlotThr.vue'
export default{
data(){
return {
message:"插槽内容002",
currentTest:"父组件内容信息"
}
},
components:{
SlotBase,
SlotTwo,
SlotThr
}
}
</script>
如图,这是父组件里面,我们定义了2个具名的插槽内容。准备将来让它们都在子组件里渲染出来。里面可以看到。我们加入了自定义属性。【slotProps】。这个东西,就是接收数据用的。它可以接收到来自子组件传递过来的数据信息。
<template>
<h3>插槽数据的交互练习</h3>
<slot name="header" :msg="childMsg"></slot>
<slot name="main" :job="jobMsg"></slot>
</template>
<script>
export default{
data(){
return {
childMsg:"子组件数据",
jobMsg:"admin管理员"
}
}
}
</script>
如图,这个就是子组件的内容了。很明显。里面绑定了自定义属性。第一个插槽里叫msg;第二个插槽里叫job。这2个自定义属性,会被传递到父组件里面对应的各自的Props里面去。它是一个对象,直接使用点操作,就能点出来。代码写的很清楚。