我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Vue插槽的作用

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Vue插槽的作用

1. 默认插槽

概述:

当子组件模板只有一个没有属性的插槽时,父组件传入的整个内容片段将插入到插槽所在的 DOM 位置,并替换掉插槽标签本身。

使用:

父组件:

<template>
  <div>
    <h3 class="title">App组件</h3>
    <hr />
    <!-- 替换默认插槽中的内容 -->
    <child>
      <h3>我是标题</h3>
    </child>
    <!-- 显示默认插槽中的内容 -->
    <child />
    <!-- 显示默认插槽中的内容 -->
    <child></child>
  </div>
</template>
<script>
import child from './components/child.vue'
export default {
  components: {
    child
  },
  data() {
    return {}
  },
  methods: {}
}
</script>
<style lang="scss" scoped></style>

子组件:

<template>
  <div>
    <h3>child组件</h3>
    <!-- 声明位置,用于在调用此组件为双标签时,中间内容显示的位置 -->
    <!-- 单个插槽,一个组件只能有一个默认插槽 -->
    <!-- <slot name="default"></slot> -->
    <!-- 简写 -->
    <slot>默认</slot>
  </div>
</template>
<script>
export default {
  data() {
    return {}
  },
  methods: {}
}
</script>
<style lang="scss" scoped></style>

2. 具名插槽

概述:

有时我们需要多个插槽,来完成对应的数据自定义显示。一个不带 name 的 <slot> 插槽会带有隐含的名字“default”,即默认插槽。带 name 即为具名插槽。

使用:

父组件:

<template>
  <div>
    <h3 class="title">App组件</h3>
    <hr />
    <child>
      <!-- 具名插槽 -->
      <!-- vue2.6之前写法 -- 重复调用会依次执行显示,即都会显示 -->
      <!-- <h3 slot="header">我是文章标题1</h3> -->
      <!-- <h3 slot="header">我是文章标题2</h3> -->
      <!-- <h3 slot="header">我是文章标题3</h3> -->
      <!-- vue2.6及之后写法 它只能写在template中,不能直接写在html标签上 -->
      <!-- vue2.6之后的具名插槽,重复调用,只会执行最后1次 -->
      <!-- <template v-slot:header> -->
      <!-- 简写:v-slot:header ==  #header -->
      <template #header>
        <h3>我是文章标题1</h3>
      </template>
      <template #header>
        <h3>我是文章标题2</h3>
      </template>
      <!-- 只会显示它 -->
      <template #header>
        <h3>我是文章标题3</h3>
      </template>
      <!-- 默认插槽 -->
      <div>默认插槽</div>
    </child>
  </div>
</template>
<script>
// 同步导入
import child from './components/child.vue'
export default {
  components: {
    child
  },
  data() {
    return {}
  },
  methods: {}
}
</script>
<style lang="scss" scoped></style>

子组件:

<template>
  <div>
    <h3>child组件</h3>
    <!-- 具名插槽,给slot添加一个名称,名称不能重复 -->
    <slot name="header">默认头部</slot>
    <!-- 默认插槽 -->
    <slot>默认</slot>
  </div>
</template>
<script>
export default {
  data() {
    return {}
  },
  methods: {}
}
</script>
<style lang="scss" scoped></style>

3. 作用域插槽

概述:

作用域插槽是一种特殊类型的插槽,用作一个 (能被传递数据的)可重用模板,来代替已经渲染好的元素。在子组件中,只需将数据传递到插槽,就像你将 prop 传递给组件一样。

在封装组件的过程中,可以为预留的<slot>插槽绑定props 数据,这种带有props 数据的 <slot> 叫做“作用域插槽”。作用域插槽就是在具名插槽的基础上,多了数据的传递。

语法:

# 子组件中
Vue.component('child', {
template: `
<div class="child">
    <slot name="default" text="我是子组件中的内容"></slot>
</div>
`
})
# 父组件中
<div class="parent">
    <child>
        // 老写法
        <div name="default" slot-scope="props">
            <div>父组件</div>
            <h3>{{ props.text }}</h3>
        </div>
        // 新写法
        <template #default="props">
            <div>
                <div>父组件</div>
                <h3>{{ props.text }}</h3>
            </div>
        </template>
    </child>
</div>

使用:

父组件:

<template>
  <div>
    <h3 class="title">App组件</h3>
    <hr />
    <child :users="users">
      <!-- vue2.6之前的写法 -->
      <!-- <button slot="del" slot-scope="index" @click="del(index)">删除</button> -->
      <!-- vue2.6之后的写法 -->
      <!-- <template v-slot:del="index">,即<template v-slot:[变量]="index">-->
      <!-- vue2.6之后的写法简写 -->
      <!-- 父组件接收子组件通过作用于插槽传过来的index -->
      <template #del="index">
        <!-- 把子组件中的span标签替换为了button标签 -->
        <button @click="del(index)">删除</button>
      </template>
    </child>
  </div>
</template>
<script>
// 同步导入
import child from "./components/child.vue";
export default {
  components: {
    child,
  },
  data() {
    return {
      users: [
        { id: 1, name: "张三" },
        { id: 2, name: "李四" },
        { id: 3, name: "王五" },
      ],
    };
  },
  methods: {
    // 传过来的index是一个对象,所以需要解构一下
    del({ index }) {
      console.log("app", index);
    },
  },
};
</script>
<style lang="scss" scoped></style>

子组件:

<template>
  <div>
    <h3>child组件</h3>
    <hr />
    <ul>
      <li v-for="(item, index) in users" :key="item.id">
        <span>
          {{ item.name }}
        </span>
        <span>
          <!-- 让插槽传数据 作用域插槽 -->
          <!-- 子组件将index通过作用域插槽传给父组件 -->
          <slot name="del" :index="index">
            <span @click="del(index)">删除</span>
          </slot>
        </span>
      </li>
    </ul>
  </div>
</template>
<script>
export default {
  props: ['users'],
  data() {
    return {}
  },
  methods: {
    del(index) {
      console.log(index)
    }
  }
}
</script>
<style lang="scss" scoped></style>

到此这篇关于Vue插槽的作用的文章就介绍到这了,更多相关Vue插槽内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Vue插槽的作用

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

浅析Vue中插槽Slot的作用和具名插槽

Vue中的插槽相信使用过Vue的小伙伴或多或少的都用过,但是你是否了解它的用法呢?本篇文章就为大家带来Vue中插槽Slot基本使用和具名插槽,希望对大家有所帮助!
2022-11-22

Vue作用域插槽怎么使用

今天小编给大家分享一下Vue作用域插槽怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。简单的展示列表现在我们做一个纯展
2023-07-04

使用vue的作用域插槽的原因是什么?

这篇文章主要介绍了使用vue的作用域插槽的原因是什么,具有一定借鉴价值,需要的朋友可以参考下。下面就和我一起来看看吧。Vue插槽是一种将内容从父组件注入子组件的绝佳方法。下面是一个基本的示例,如果我们不提供父级的任何slot位的内容,刚父级
2023-06-14

Vue中的插槽如何使用

本篇内容主要讲解“Vue中的插槽如何使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Vue中的插槽如何使用”吧!1、什么是插槽插槽(Slot)是 vue 为组件的封装者提供的能力。允许开发者在
2023-06-30

Vue中的插槽怎么使用

这篇“Vue中的插槽怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Vue中的插槽怎么使用”文章吧。默认插槽首先做一个
2023-06-30

Vue插槽Slot的作用是什么及怎么使用

本篇内容介绍了“Vue插槽Slot的作用是什么及怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!插槽Slot插槽Slot的作用初识插槽
2023-07-04

编程热搜

目录