vue2的插槽基本使用

vue2插槽的基本使用

匿名插槽 : 没有名字的插槽
具名插槽 : 有名字的插槽
作用域插槽 :传值

创建一个公共的组件HelloWorld.vue,
匿名插槽

<template>
  <div class="hello">
    <slot name="header"></slot>
    <p>接收到插槽内容</p>
    <slot></slot>
  </div>
</template>

<script>
export default {
  name: 'HelloWorld',
  data() {
    return {
     
    }
  }
}
</script>

创建一个业务组件 HomeView.vue 并在该组件内使用上面带有插槽的组件(HelloWorld.vue)

<template>
  <div class="home">
    <HelloWorld>
      <template>
        <p style="color: red">内容提示</p>
      </template>
    </HelloWorld>
  </div>
</template>

<script>
import HelloWorld from '@/components/HelloWorld.vue'
export default {
  name: 'HomeView',
  components: {
    HelloWorld
  }
}
</script>

具名插槽 修改HelloWorld.vue组件 增加name属性 加上名字

<template>
  <div class="hello">
    <slot name="header"></slot>
    <p>接收到插槽内容</p>
    <slot name="footer"></slot>
  </div>
</template>

<script>
export default {
  name: 'HelloWorld',
  data() {
    return {
      
    }
  }
}
</script>
<style scoped></style>

在业务组件 HomeView.vue 使用具名插槽

<template>
  <div class="home">
    <HelloWorld>
      <template #header>
        <p style="color: red">头部内容提示</p>
      </template>
      <template #footer>
        <p style="color: orange">底部内容提示</p>
      </template>
    </HelloWorld>
  </div>
</template>

<script>
import HelloWorld from '@/components/HelloWorld.vue'
export default {
  name: 'HomeView',
  components: {
    HelloWorld
  }
}
</script>

显示的效果
在这里插入图片描述
作用域插槽 修改HelloWorld.vue组件传 给具名插槽header传一个arr数组

<template>
  <div class="hello">
    <slot name="header"></slot>
    <p>接收到插槽内容</p>
    <slot name="footer" :arr="arr"></slot>
  </div>
</template>
<script>
export default {
  name: 'HelloWorld',
  data() {
    return {
      arr: ['a', 'b', 'c', 'd']
    }
  }
}
</script>

在HomeView.vue使用如下

<template>
  <div class="home">
    <HelloWorld>
      <template>
        <p style="color: red">头部内容提示</p>
      </template>
      <template #footer="{ arr }">
        <p style="color: orange">底部内容提示</p>
        <div v-for="item in arr" :key="item">{{ item }}</div>
      </template>
    </HelloWorld>
  </div>
</template>
<script>
import HelloWorld from '@/components/HelloWorld.vue'
export default {
  name: 'HomeView',
  components: {
    HelloWorld
  }
}
</script>

显示的效果如下所示

在这里插入图片描述

Vue.js 2.x 中,插槽slot)是一种用于组件内容分发的机制,允许父组件向子组件传递 HTML 内容并在子组件中渲染。Vue 2插槽主要分为三种类型:默认插槽、具名插槽和作用域插槽。 ### 默认插槽 默认插槽Vue 中最基础的插槽形式,适用于父组件只需要传递一段内容到子组件的情况。子组件使用 `<slot>` 标签作为占位符,父组件的内容将被插入该位置。 **示例:** 子组件 `ChildComponent.vue`: ```vue <template> <div class="child"> <h3>这是子组件</h3> <slot>这是一个默认插槽内容</slot> </div> </template> ``` 父组件使用方式: ```vue <template> <div class="parent"> <h2>父组件</h2> <ChildComponent> <p>这是插入的插槽内容。</p> </ChildComponent> </div> </template> ``` ### 具名插槽 具名插槽允许父组件根据名称将多个内容片段传递到子组件的不同位置。子组件通过指定 `name` 属性来定义多个插槽。 **示例:** 子组件 `ChildComponent.vue`: ```vue <template> <div class="child"> <header> <slot name="header"></slot> </header> <main> <slot></slot> </main> <footer> <slot name="footer"></slot> </footer> </div> </template> ``` 父组件使用方式: ```vue <template> <div class="parent"> <h2>父组件</h2> <ChildComponent> <template v-slot:header> <h1>这里是头部内容</h1> </template> <p>这是默认插槽的内容。</p> <template #footer> <p>这里是底部内容</p> </template> </ChildComponent> </div> </template> ``` ### 作用域插槽 作用域插槽允许子组件向父组件传递数据,使得父组件可以基于这些数据自定义插槽内容。它通过 `slot-scope` 属性实现。 **示例:** 子组件 `ChildComponent.vue`: ```vue <template> <div class="child"> <ul> <li v-for="item in items" :key="item.id"> <slot :item="item">{{ item.text }}</slot> </li> </ul> </div> </template> <script> export default { data() { return { items: [ { id: 1, text: '苹果' }, { id: 2, text: '香蕉' }, { id: 3, text: '橙子' } ] }; } }; </script> ``` 父组件使用方式: ```vue <template> <div class="parent"> <h2>父组件</h2> <ChildComponent> <template slot-scope="{ item }"> <span style="color: red">{{ item.text }}</span> </template> </ChildComponent> </div> </template> ``` ### 插槽继承与 `$slots` 在 Vue 2 中,可以通过 `$slots` 访问父组件传递的插槽内容,并将其动态渲染到子组件中。这在封装第三方组件时非常有用。 **示例:** ```vue <template> <div> <component v-for="(value, name) in $slots" :is="name" :key="name"> <slot :name="name"></slot> </component> </div> </template> ``` 以上方法展示了 Vue 2.x 中插槽基本用法,包括默认插槽、具名插槽和作用域插槽使用方式。这些特性使得组件更加灵活和可复用,同时支持复杂的 UI 构建需求[^1]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值