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里面去。它是一个对象,直接使用点操作,就能点出来。代码写的很清楚。

vue前端开发自学,插槽练习,同时渲染父子组件的数据信息-LMLPHP

01-12 17:34