vue solt插槽

91 阅读1分钟

匿名插槽 插槽没有名字

  • 插槽就是子组件中的提供给父组件使用的一个占位符,用 表示,父组件可以在这个占位符中填充任何模板代码,填充的内容会替换子组件的标签。
父组件A
<template>
  <div>
    <HelloWorld><p>会移动的城堡</p></HelloWorld>
  </div>
</template>
<script>
import HelloWorld from "../../components/solt/index.vue";
export default {
  components: {
    HelloWorld,
  },
};
</script>
父组件B
<template>
  <div>
    <HelloWorld></HelloWorld>
  </div>
</template>
<script>
import HelloWorld from "../../components/solt/index.vue";
export default {
  components: {
    HelloWorld,
  },
};
</script>
子组件
template>
  <div>
    <slot></slot>
    <p>宫崎骏</p>
  </div>
</template>
<script>
export default {};
</script>

父组件A 自定义了一个子组件中写了一段内容,子组件里面有solt插槽

当父组件A 渲染子组件里面内容的时候solt便签的时候会替换成会移动的城堡

父组件B 自定义了一个子组件 父组件B里面没有渲染内容solt就不会显示留了一个空位只是提供了一个位置

H_L8SRO9LVD5`7@}S7KOV~3.png .png

具名插槽

  • 具名插槽其实就是给插槽取个名字。一个子组件可以放多个插槽,而且可以放在不同的地方,而父组件填充内容时,可以根据这个名字把内容填充到对应插槽中。

父组件A

<template #headr>
  <div>
    <HelloWorld>
    //两种写法
        <template v-slot:headr>
        <h1>Here might be a page title</h1>
      </template>
            //v-slot可以简写成#
      //具名插槽的名字必须在写在template标签才能生效
      <template #footer>
        <div>会移动的城堡1</div>
      </template>
    </HelloWorld>
  </div>
</template>
<script>
import HelloWorld from "../../components/solt/index.vue";
export default {
  components: {
    HelloWorld,
  },
};
</script>

子组件

<template>
  <div>
    <slot name="headr"></slot>
    <p>宫崎骏</p>
    <slot name="footer"></slot>
  </div>
</template>
<script>
</script>
.png

作用域插槽

作用域插槽就是 :绑定数据的插槽.

父组件A

<template #headr>
 <div>
   <HelloWorld>
     <!-- <template v-slot:headr="scope">
       <h1>{{ scope.sex }}</h1>
       {{ scope.age }}
     </template> -->
     <!-- v-slot可以简写成# 
   父组件语法  #子组件slot内插槽名="scope" -->
     <template #headr="scope">
       <h1>{{ scope.sex }}</h1>
       {{ scope.age }}
     </template>
   </HelloWorld>
 </div>
</template>

<script>
import HelloWorld from "../../components/solt/index.vue";
export default {
 components: {
   HelloWorld,
 },
};
</script>

<style>
</style>

子组件

<template>
 <div>
   <slot name="headr" :sex="sex" :age="15"></slot>
   <!-- 语法<slot name="插槽名" :sex="字符串" :age="字符串"></slot> -->
   <p>宫崎骏</p>
 </div>
</template>

<script>
export default {
 data() {
   return {
     sex: "男",
   };
 },
};
</script>