Vue插槽 slot 标签

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

Vue 插槽 slot 标签:
作用:让父组件可以向子组件指定的位置插入一段 html 结构,也属于一种组件之间的通信方式,适用于父传子 

不使用插槽:

创建 List 组件,接收父元素传递的数据,用于显示分类列表。

<template>
    <div class="list">
        <h3>{{ title }}分类</h3>
        <ul>
            <li v-for="(item, index) in listData" :key="index">{{ item }}</li>
        </ul>
    </div>
</template>

<script>
export default {
    name: 'List',
    props: ['listData', 'title']
}
</script>

<style scoped>
.list {
    background-color: skyblue;
    width: 200px;
    height: 300px;
}
.list h3 {
    text-align: center;
    background-color: orange;
}
</style>

在 Home 页面中引用 List 组件,并传递对应的数据。

<template>
    <div class="home">
        <List title="美食" :listData="foods"></List>
        <List title="游戏" :listData="games"></List>
        <List title="电视剧" :listData="films"></List>
    </div>
</template>

<script>
import List from "../components/List"
export default {
    name: "Home",
    components: { List },
    data() {
        return {
            foods: ['小龙虾', '火锅', '烧烤', '大闸蟹'],
            games: ['地下城与勇士', '穿越火线', '英雄联盟'],
            films: ['《三国》', '《水浒传》', '《西游记》', '《红楼梦》']
        }
    }
}
</script>

<style scoped>
.home {
    display: flex;
    justify-content: space-around;
}
</style>

:组件会根据数据渲染不同的内容,但结构都是一样的。如果想在组件中渲染不同的结构,就需要用到 slot 标签了。

Vue插槽 slot 标签,vue.js,前端,javascript

 备注:组件中的结构并不是一直不变的,有时候需要根据需求动态调整组件的结构内容。

 默认插槽:

在 List 组件中,删除不确定的结构,替换为 slot 标签。并且 slot 标签还可以设置默认值。

<template>
    <div class="list">
        <h3>{{ title }}分类</h3>
        <slot>默认值,如果没有传递具体的结构,显示的内容</slot>
    </div>
</template>

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

<style>
.list {
    background-color: skyblue;
    width: 200px;
    height: 300px;
}
.list h3 {
    text-align: center;
    background-color: orange;
}
.list img {
    width: 100%;
}
</style>

在 Home 页面,给每个 List 组件标签添加对应的内容即可。如果没有指定内容,就会显示 slot 标签中的默认值。

<template>
    <div class="home">
        <List title="美食">
            <img src="https://s1.ax1x.com/2023/03/22/ppaRcTI.jpg" alt="">
        </List>
        <List title="游戏">
            <ul>
                <li v-for="(item, index) in games" :key="index">{{ item }}</li>
            </ul>
        </List>
        <List title="电视剧"></List>
    </div>
</template>

<script>
import List from "../components/List"
export default {
    name: "Home",
    components: { List },
    data() {
        return {
            games: ['地下城与勇士', '穿越火线', '英雄联盟'],
        }
    }
}
</script>

<style scoped>
.home {
    display: flex;
    justify-content: space-around;
}
</style>

:组件标签中的结构在父组件中就会被解析,而不是先传到 slot 中再解析。所以数据要放在父组件中渲染,而样式放在父组件或子组件中都可以。

Vue插槽 slot 标签,vue.js,前端,javascript

 具名插槽:

如果组件中需要多个插槽,就需要给 slot 标签定义名称了,用于区分存放的内容。

<template>
    <div class="list">
        <h3>{{ title }}分类</h3>
        <slot name="content">第一个插槽</slot>
        <slot name="footer">第二个插槽</slot>
    </div>
</template>

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

<style>
.list {
    background-color: skyblue;
    width: 200px;
    height: 300px;
}
.list h3 {
    text-align: center;
    background-color: orange;
}
.list img {
    width: 100%;
}
.list div {
    display: flex;
}
.list a {
    display: block;
    width: 100%;
    text-align: center;
    margin-top: 30px;
}
</style>

在使用组件时,需要给内容添加 slot 属性,用于指定放到哪个 slot 标签中。

<template>
    <div class="home">
        <List title="美食">
            <img slot="content" src="https://s1.ax1x.com/2023/03/22/ppaRcTI.jpg" alt="">
            <a slot="footer" href="https://www.baidu.com">更多美食</a>
        </List>
        <List title="游戏">
            <ul slot="content">
                <li v-for="(item, index) in games" :key="index">{{ item }}</li>
            </ul>
            <div class="foot" slot="footer">
                <a href="https://www.baidu.com">单机游戏</a>
                <a href="https://www.baidu.com">网络游戏</a>
            </div>
        </List>
        <List title="电视剧">
            <p>如果不定义slot属性,是不会显示的</p>
        </List>
    </div>
</template>

<script>
import List from "../components/List"
export default {
    name: "Home",
    components: { List },
    data() {
        return {
            games: ['地下城与勇士', '穿越火线', '英雄联盟'],
        }
    }
}
</script>

<style scoped>
.home {
    display: flex;
    justify-content: space-around;
}
</style>

:如果不给内容添加 slot 属性,页面中是不会显示这块内容的。例如第三个分类。

Vue插槽 slot 标签,vue.js,前端,javascript
 

 备注:还可以使用 v-slot:名称 的方式指定,但是 v-slot 只能在 template 标签中使用。

<List title="电视剧">
	<template v-slot:footer>
		<p>如果不定义名称,是不会显示的</p>
	</template>
</List>

原创作者:吴小糖

创作时间:2023.8.26文章来源地址https://www.toymoban.com/news/detail-673031.html

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

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

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

相关文章

  • Vue中的ajax和slot插槽

    在前后端分离项目中,解决跨域问题是一个常见的需求。下面列举了几种常用的跨域解决方法: CORS(跨域资源共享):这是最常用且推荐的跨域解决方案。通过在服务器端设置响应头,允许特定的源(域名、协议、端口)访问资源。在后端服务器上进行配置即可实现跨域请

    2024年02月10日
    浏览(34)
  • Vue3 slot插槽多层传递

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

    2024年02月15日
    浏览(29)
  • 如何使用Vue的插槽(slot)语法?

    Vue.js 是一个流行的 JavaScript 框架,用于构建动态和交互式的用户界面。它的模板语法提供了许多功能,其中之一就是插槽(slot)语法。 插槽(slot)是 Vue.js 模板中一种非常有用的机制,它允许你在一个组件中插入内容,然后在另一个组件中使用这些内容。这个机制非常灵活

    2024年02月08日
    浏览(38)
  • 【Vue3 第十九章】插槽 slot

    数字化管理平台 Vue3+Vite+VueRouter+Pinia+Axios+ElementPlus 权限系统-商城 个人博客地址 在某些场景中,我们可能想要为子组件传递一些模板片段,让子组件在它们的组件中渲染这些片段。这就用到了插槽。 插槽是子组件中的提供给父组件使用的一个占位符,用 slot 表示,父组件可以

    2024年02月09日
    浏览(29)
  • Vue中的Ajax 配置代理 slot插槽

    本案例需要下载 axios 库 npm install axios 配置参考文档 Vue-Cli devServer.proxy vue.config.js 是一个可选的配置文件,如果项目的 (和 package.json 同级的) 根目录中存在这个文件,那么它会被 @vue/cli-service 自动加载。你也可以使用 package.json 中的 vue 字段,但是注意这种写法需要你严格遵照

    2024年02月09日
    浏览(34)
  • Vue3——第十三章(插槽 Slots)

    这里有一个 FancyButton 组件,可以像这样使用: 而 FancyButton 的模板是这样的: slot 元素是一个插槽出口 (slot outlet),标示了父元素提供的插槽内容 (slot content) 将在哪里被渲染。 最终渲染出的 DOM 是这样: 通过使用插槽, FancyButton 仅负责渲染外层的 button (以及相应的样式),而

    2024年02月07日
    浏览(38)
  • FE_Vue学习笔记 插槽 slot

    插槽分为匿名插槽、具名插槽、作用域插槽。子组件中: 匿名插槽只能有一个; 可以有多个具名插槽; 作用域插槽中可以有匿名插槽和具名插槽。 当项目中一个组件可以多次复用时,我们可以把这个组件封装成单独的 .vue 文件,从而可以在不同的页面中引入该组件,从而实

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

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

    2024年02月09日
    浏览(20)
  • VUE--插槽slot(将父级的模块片段插入到子级中)

    组件可以接收任意类型的JS值作为props,但我们想要为子组件传递一些模板片段,并在子组件中进行渲染时,此时可以采用插槽slot来实现 简单来说,插槽时组件内留一个或多个插槽的位置,供组件传递对应的模板代码(传递任意HTML的结构),插槽的存在使得组件变的更为灵活

    2024年01月22日
    浏览(31)
  • element-ui Vue 封装组件按钮工具栏,使用slot插槽

    封装常用按钮工具栏,方便其它页面调用 缺点:工具栏下面div会显示工具栏下面,下面需要使用margin-top:40px(小学生一个没整明白)希望大神能帮解决 运行效果          组件代码 tt-btnBar.vue 父窗口调用 testbtnbar.vue

    2024年02月02日
    浏览(31)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包