Vue3——第十三章(插槽 Slots)

这篇具有很好参考价值的文章主要介绍了Vue3——第十三章(插槽 Slots)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


一、插槽内容与出口

  • 这里有一个 <FancyButton> 组件,可以像这样使用:
    vue3插槽,Vue3,前端,vue.js,javascript

  • <FancyButton> 的模板是这样的:
    vue3插槽,Vue3,前端,vue.js,javascript

  • <slot> 元素是一个插槽出口 (slot outlet),标示了父元素提供的插槽内容 (slot content) 将在哪里被渲染。
    vue3插槽,Vue3,前端,vue.js,javascript

  • 最终渲染出的 DOM 是这样:
    vue3插槽,Vue3,前端,vue.js,javascript

  • 通过使用插槽,<FancyButton> 仅负责渲染外层的 <button> (以及相应的样式),而其内部的内容由父组件提供。

  • 理解插槽的另一种方式是和下面的 JavaScript 函数作类比,其概念是类似的:
    vue3插槽,Vue3,前端,vue.js,javascript

  • 通过使用插槽,<FancyButton> 组件更加灵活和具有可复用性。现在组件可以用在不同的地方渲染各异的内容,但同时还保证都具有相同的样式。

  • Vue 组件的插槽机制是受原生 Web Component <slot> 元素的启发而诞生,同时还做了一些功能拓展。文章来源地址https://www.toymoban.com/news/detail-734038.html

二、渲染作用域

  • 插槽内容可以访问到父组件的数据作用域,因为插槽内容本身是在父组件模板中定义的。举例来说:
    vue3插槽,Vue3,前端,vue.js,javascript
  • 这里的两个 {{ message }} 插值表达式渲染的内容都是一样的。
  • 插槽内容无法访问子组件的数据。Vue 模板中的表达式只能访问其定义时所处的作用域,这和 JavaScript 的词法作用域规则是一致的。
  • 换言之:父组件模板中的表达式只能访问父组件的作用域;子组件模板中的表达式只能访问子组件的作用域。

三、默认内容

  • 如果我们想在父组件没有提供任何插槽内容时在 <button> 内渲染“Submit”,只需要将“Submit”写在 <slot> 标签之间来作为默认内容:
    vue3插槽,Vue3,前端,vue.js,javascript

四、具名插槽

  • 有时在一个组件中包含多个插槽出口是很有用的。举例来说,在一个 <BaseLayout> 组件中,有如下模板:
    vue3插槽,Vue3,前端,vue.js,javascript
  • 对于这种场景,<slot> 元素可以有一个特殊的 attribute name,用来给各个插槽分配唯一的 ID,以确定每一处要渲染的内容:
    vue3插槽,Vue3,前端,vue.js,javascript
  • 这类带 name 的插槽被称为具名插槽 (named slots)。没有提供 name 的 <slot> 出口会隐式地命名为“default”。
  • 在父组件中使用 <BaseLayout> 时,我们需要一种方式将多个插槽内容传入到各自目标插槽的出口。此时就需要用到具名插槽了:
  • 要为具名插槽传入内容,我们需要使用一个含 v-slot 指令的 <template> 元素,并将目标插槽的名字传给该指令:
    vue3插槽,Vue3,前端,vue.js,javascript
  • v-slot 有对应的简写 #,因此 <template v-slot:header> 可以简写为 <template #header>。其意思就是“将这部分模板片段传入子组件的 header 插槽中”。
    vue3插槽,Vue3,前端,vue.js,javascript
  • 使用 JavaScript 函数来类比可能更有助于你来理解具名插槽:
    vue3插槽,Vue3,前端,vue.js,javascript

五、动态插槽名

  • 动态指令参数在 v-slot 上也是有效的,即可以定义下面这样的动态插槽名:
    vue3插槽,Vue3,前端,vue.js,javascript

六、作用域插槽

  • 在上面的渲染作用域中我们讨论到,插槽的内容无法访问到子组件的状态。
  • 然而在某些场景下插槽的内容可能想要同时使用父组件域内和子组件域内的数据。要做到这一点,我们需要一种方法来让子组件在渲染时将一部分数据提供给插槽。
  • 我们也确实有办法这么做!可以像对组件传递 props 那样,向一个插槽的出口上传递 attributes:
    vue3插槽,Vue3,前端,vue.js,javascript
  • 当需要接收插槽 props 时,默认插槽和具名插槽的使用方式有一些小区别。
  • 下面我们将先展示默认插槽如何接受 props,通过子组件标签上的 v-slot 指令,直接接收到了一个插槽 props 对象:
    vue3插槽,Vue3,前端,vue.js,javascript
    vue3插槽,Vue3,前端,vue.js,javascript
  • 子组件传入插槽的 props 作为了 v-slot 指令的值,可以在插槽内的表达式中访问。
  • 你可以将作用域插槽类比为一个传入子组件的函数。子组件会将相应的 props 作为参数传给它:
    vue3插槽,Vue3,前端,vue.js,javascript
  • 实际上,这已经和作用域插槽的最终代码编译结果、以及手动编写渲染函数时使用作用域插槽的方式非常类似了。
  • v-slot="slotProps" 可以类比这里的函数签名,和函数的参数类似,我们也可以在 v-slot 中使用解构:
    vue3插槽,Vue3,前端,vue.js,javascript

到了这里,关于Vue3——第十三章(插槽 Slots)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • vue3插槽的使用

    插槽就是子组件中的提供给父组件使用的一个占位符,用 表示,父组件可以在这个占位符中填充任何模板代码,如 HTML、组件等,填充的内容会替换子组件的标签。 子组件SlotComponent.vue 父组件 输出结果: 输出结果: 子组件SlotComponent.vue 上段代码中我们添加了 3 个 slot 插槽,

    2023年04月20日
    浏览(36)
  • Vue3 slot插槽多层传递

    如果你想传递一个slot,从爷到孙的传递, 看了网上的一些方案,依赖注入都来了,其实没那么麻烦 最顶层组件,插入一个按钮到 slot name为 btn的 插槽里面,Button接收一个row的参数,参数可能有多个,这里 用了 { row } 只取 row 在中间组件,这里把插入一个 插槽 插入到 slot n

    2024年02月15日
    浏览(41)
  • 【day 12】插槽和vue3

    用于父组件给子组件内 传递html内容 默认插槽 具名插槽 作用域插槽 适用于: 数据不在父组件内 在 子组件内 如果父组件想个性化定制子组件的内容 确保 你的 vue-cli 是 4.5.0的版本以上 vue --verstion的方式查看 版本过低请更新版本 初始文件对比 router/index.js的区别 store/index.js 关

    2024年02月11日
    浏览(41)
  • Vue2向Vue3过度核心技术插槽

    1.作用 让组件内部的一些 结构 支持 自定义 2.需求 将需要多次显示的对话框,封装成一个组件 3.问题 组件的内容部分, 不希望写死 ,希望能使用的时候 自定义 。怎么办 4.插槽的基本语法 组件内需要定制的结构部分,改用****占位 使用组件时, ****标签内部, 传入结构替换slo

    2024年02月11日
    浏览(41)
  • vue3中setup的两个参数 props,context (attrs,emit,slots),vue3中的双向数据绑定自定义事件emit和v-model

    目录 setup函数 props参数 案例 第一种写法(用setup函数的方式):  第二种方法(语法糖形式即setup写入script标签中)也可以传值,  context (attrs,emit,slots) vue3中的双向数据绑定自定义事件emit和v-model emit自定义事件 v-model 有两个参数分别是 props,context 即 props参数是一个 对象 ,

    2024年02月10日
    浏览(43)
  • 【vue2第十三章】自定义指令 自定义v-loading指令

    像 v-html,v-if,v-for都是vue内置指令,而我们也可以封装自定义指令,提升编码效率。 什么是自定义指令? 自己定义的一些指令,可以进行一些dom操作,扩展格外的功能。比如让图片懒加载,让input自动聚焦。 自定义指令又分为全局注册和局部注册。 使用方法则是与内置指令

    2024年02月09日
    浏览(47)
  • vue3 slot 插槽 在h函数中如何使用

    vue3已经出了有一段时间了,越来越多的小伙伴开始用vue3来写项目。开发过程中难免会用到h函数, 有时候会使用h函数封装一些组件,封装组件又会用到插槽。所以呢对于在h函数中如何使用插槽稍作了整理,希望能帮到帮接触h函数的小伙伴。 这里只讲解插槽的用法,不涉及

    2024年02月09日
    浏览(37)
  • 前端新手Vue3+Vite+Ts+Pinia+Sass项目指北系列文章 —— 第十一章 基础界面开发 (组件封装和使用)

    Vue 是前端开发中非常常见的一种框架,它的易用性和灵活性使得它成为了很多开发者的首选。而在 Vue2 版本中,组件的开发也变得非常简单,但随着 Vue3 版本的发布,组件开发有了更多的特性和优化,为我们的业务开发带来了更多便利。本文将介绍如何使用 Vue3 开发业务组件

    2024年02月19日
    浏览(89)
  • 前端新手Vue3+Vite+Ts+Pinia+Sass项目指北系列文章 —— 第十二章 常用工具函数 (Utils配置)

    在项目开发中,我们经常会使用一些工具函数,也经常会用到例如 loadsh 等工具库,但是这些工具库的体积往往比较大,如果项目本身已经引入了这些工具库,那么我们就没有必要再引入一次,所以我们需要自己封装一些工具函数,来简化我们的开发。 在 src/utils 目录下创建

    2024年02月20日
    浏览(62)
  • vue3的setup 语法糖中获取slot 插槽的dom对象

    最近使用vue3开发项目,需要封装一个无限滚动的组件,使用scroll组件内置插槽接受模板的方式,所以需要在scroll组件内获取到模板渲染后dom元素的宽高。 但是setup语法糖是组件生命周期的beforeCreate和created中,而且经过测试,在mounted函数中的el属性也是null,所以得出结论模板

    2024年02月15日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包