【Vue插槽详解】

Vue插槽详解

  • Vue插槽的作用
  • 一、默认插槽
        • 完整代码:
  • 二、具名插槽
        • 完整代码:
  • 三、作用域插槽
        • 完整代码如下:


Vue插槽的作用

Vue插槽是Vue中常见的一种组件间的相互通信方式,作用是让父组件可以向子组件指定位置插入html结构,适用于父组件===>子组件,在要接收数据的组件页面通过标签来表示,简单来说,就是通过此标签来起到占位的作用,而要插入的内容也会对应到标签所在的位置。


一、默认插槽

默认插槽是插槽最基本的方式:
首先在父组件App.Vue中引入子组件,并在引入的子组件标签内插入需要的html元素,在子组件中把需要用插槽的地方用标签替代:

在App.vue中引入子组件,使用子组件,并且声明需要的数据:
1.引入组件:

import StudyM from './components/StudyM.vue'

2.使用组件:

<template>
  <div id="app">
    
    <StudyM title="游戏列表">
      <ul>
        <li v-for="game , index in games" :key="index">{{game}}li>
      ul>
    StudyM>
    <StudyM title="推荐音乐">
      <ul>
        <li v-for="music , index in musics" :key="index">{{music}}li>
      ul>
    StudyM>
    <StudyM title="电影推荐">
      <ul>
        <li v-for="movie , index in movies" :key="index">{{movie}}li>
      ul>
    StudyM>
  div>
template>

3.添加数据:

data(){
    return{
      games:['英雄联盟', '炉石传说', '穿越火线', 'QQ飞车', '吃鸡'],
      musics:['迷途羔羊', '红玫瑰', '富士山下', '麻雀', '妈妈的话', '故乡'],
      movies:['蜘蛛侠', '复仇者联盟', '金刚狼', '触不可及', '唐人街探案','当幸福来敲门']
    }
  }

完整代码:

App.vue:

<template>
  <div id="app">
    
    <StudyM title="游戏列表">
      <ul>
        <li v-for="game , index in games" :key="index">{{game}}li>
      ul>
    StudyM>
    <StudyM title="推荐音乐">
      <ul>
        <li v-for="music , index in musics" :key="index">{{music}}li>
      ul>
    StudyM>
    <StudyM title="电影推荐">
      <ul>
        <li v-for="movie , index in movies" :key="index">{{movie}}li>
      ul>
    StudyM>
  div>
template>

<script>
  //引入组件
  import StudyM from './components/StudyM.vue'
export default {
  name: 'App',
  components: {
    StudyM
  },
  data(){
    return{
      games:['英雄联盟', '炉石传说', '穿越火线', 'QQ飞车', '吃鸡'],
      musics:['迷途羔羊', '红玫瑰', '富士山下', '麻雀', '妈妈的话', '故乡'],
      movies:['蜘蛛侠', '复仇者联盟', '金刚狼', '触不可及', '唐人街探案','当幸福来敲门']
    }
  }
}
script>

<style scoped>
#app{
  display: inline-flex;
  justify-content: center;
}
style>

StudyM.vue:

<template>
  <div class="box">
    <h4>{{title}}h4>
    <slot>slot>
  div>
template>

<script>
export default {
    name:'StudyM',
    props:['title'],
}
script>

<style scoped>
.box{
  margin: 20px;
  width: 200px;
  height: 200px;
  background-color: aqua;
}
h4{
  text-align: center;
  background-color: rgb(127, 236, 113);
}
style>

此时,我们已经完成了默认插槽的使用:
效果图:【Vue插槽详解】_第1张图片


二、具名插槽

简单来说,所谓的具名插槽就是有名字的插槽

那它和默认插槽有什么不同呢?
有时候我们会遇到这种场景,在一个组件中,我们虽然可以复用组件的结构,但是往往,有时候我们会遇到一个组件多用,但是结构稍微有所差别的情况,这时,就会用得到具名插值。

首先在要插入html的部分需要用一个