Vue详解之增加组件扩展性的slot

本篇文章给大家带来了关于vue的相关知识,其中主要介绍了增加组件扩展性的slot的相关问题,组件的插槽也是为了让我们封装的组件更加具有扩展性,让使用者可以决定组件内部的一些内容到底展示什么,下面一起来看一下,希望对大家有帮助。

Vue详解之增加组件扩展性的slot

【相关推荐:vue、vue】

slot 插槽

组件的插槽

组件的插槽也是为了让我们封装的组件更加具有扩展性

让使用者可以决定组件内部的一些内容到底展示什么。

立即学习“前端免费学习笔记(深入)”;

如何去封装这类的组件呢?slot

它们也很多区别,但是也有很多共性

如果,我们每一个单独去封装一个组件,显然不合适:比如每个页面都返回,这部分内容我们就要重复去封装。
但是,如果我们封装成一个,好像也不合理:有些左侧是菜单,有些是返回,有些中间是搜索,有些是文字,等等。

如何封装合适呢?

抽取共性,保留不同。

最好的封装方式就是将共性抽取到组件中,将不同暴露为插槽。
一旦我们预留了插槽,就可以让使用者根据自己的需求,决定插槽中插入什么内容。
是搜索框,还是文字,还是菜单。由调用者自己来决定。

slot基本使用

在子组件中,使用特殊的元素就可以为子组件开启一个插槽。该插槽插入什么内容取决于父组件如何使用。

通过一个简单的例子,来给子组件定义一个插槽:
中的内容表示,如果没有在该组件中插入任何其他内容,就默认显示该内容
Vue详解之增加组件扩展性的slot

  1. <span class="typ">Document</span>
    aaaaa

    我是子组件

    hahaha

    let app = new Vue({ el: '#app', components: { cpn: { template: '#cpn', } } })

登录后复制

具名插槽 slot

当子组件的功能复杂时,子组件的插槽可能并非是一个

比如我们封装一个导航栏的子组件,可能就需要三个插槽,分别代表左边、中间、右边。那么,外面在给插槽插入内容时,如何区分插入的是哪一个呢?

如何使用具名插槽呢?

只要给slot元素一个name属性即可

  1. <span class="typ">Document</span>
    aaaaa

    我是子组件

    hahaha


    let app = new Vue({ el: '#app', components: { cpn: { template: '#cpn', } } })

登录后复制

作用域插槽

实质:

父组件替换插槽的标签,但是内容由子组件来提供

需求:

子组件中包括一组数据,比如:pLanguages: [‘JavaScript’, ‘Python’, ‘Swift’, ‘Go’, ‘C++’]
需要在多个界面进行展示:

某些界面是以水平方向一一展示的某些界面是以列表形式展示的某些界面直接展示一个数组

内容在子组件,希望在父组件中展示:

利用slot作用域插槽

在父组件使用我们的子组件时,从子组件中拿到数据:

通过获取到slotProps属性通过slotProps.data就可以获取到刚才我们传入的data了

  1. {{slot.data.join('-')}} {{slot.data.join('*')}}

登录后复制

    • {{item}}

登录后复制

Vue详解之增加组件扩展性的slot

  1. <span class="typ">Document</span>
    {{slot.data.join('-')}} {{slot.data.join('*')}}
    • {{item}}
    let app = new Vue({ el: '#app', components: { cpn: { template: '#cpn', data() { return { pLanguages: ['JavaScript', 'Python', 'Swift', 'Go', 'C++'], } } } } })

登录后复制

【相关推荐:vue、vue】

以上就是Vue详解之增加组件扩展性的slot的详细内容,更多请关注【创想鸟】其它相关文章!

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
编程技术

Vue中slot使用解析之具名插槽与作用域插槽

2025-4-1 16:58:51

编程技术

Vuex状态管理之Mutation的使用详解

2025-4-1 16:59:13

0 条回复 A文章作者 M管理员
欢迎您,新朋友,感谢参与互动!
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
私信列表
搜索