slot插槽的使用

88 阅读1分钟

1、插槽

组件的插槽是为了让封装的组件更具有拓展性,开发的时候可以自定义组件在不同地方的内容。

2、基本使用

<div id="app">
  <test><h2>变化1</h2></test>
  <test><h2>变化2</h2></test>
  <test><h2>变化3</h2></test>
</div>
<template id="test">
  <div>
    <h2>固定内容</h2>
    <slot>
      <h2>可变内容</h2>  //默认显示
    </slot>
  </div>
</template>

3、具名插槽的使用

<div id="app">
  <test>
    <template v-slot:header>
      <h2>页头</h2>
    </template>
    
    <template>
      <h2>主要内容</h2>
    </template>
    
    <template v-slot:footer>
      <h2>页脚</h2>
    </template>
  </test>
</div>
<template>
  <div id="test">
    <slot name="header"></slot>
    <slot></slot>
    <slot name="footer"></slot>
  </div>
</template>

4、作用域插槽的使用

子组件的数据可以被父组件拿到

<template>
  <div id="my-test">
    <slot name="slotscope" :user="user" :text="text"></slot>
  </div>
</template>

<script>
export default {
  name: "mytest",
  data() {
    return {
      user: [
        {
          name: "哈哈哈",
          age: "12",
        },
        {
          name: "咩咩咩",
          age: "11",
        },
      ],
      text: {
        msg: "作用域插槽",
      },
    };
  },
};
</script>
<template>
 <div id="app">
   <mytest>
     <template v-slot:slotscope="item">
       <h1>{{ item.text.msg }}</h1>
       <div v-for="user in item.user" :key="user">
         <h3>{{ user.name }}</h3>
       </div>
     </template>
   </mytest>
 </div>
</template>

<script>
import mytest from "./components/test.vue";

export default {
 name: "App",
 components: {
   mytest,
 },
 data() {
   return {};
 },
};
</script>