首页 > 其他分享 >Vue中的插槽

Vue中的插槽

时间:2023-11-12 14:35:12浏览次数:31  
标签:slot Vue 作用域 插槽 默认 内容 组件

插槽-默认插槽

作用:让组件内部的一些结构支持自定义
需求:要在页面中显示一个对话框,封装成一个组件,但是组件的内容部分,不是写死的,希望能使用时自定义。

插槽的基本语法

  • 组件内需要定制的结构部分,改用<slot></slot>占位
  • 使用组件时,在组件中传入结构替换slot,例如<组件名>xxxxxx</组件名>
    image

image

image

image

这样就实现了自定义内容。

插槽默认内容

插槽后备内容:封装组件时,可以为预留的<slot> 插槽提供后备内容(默认内容)
语法:在<slot></slot>标签内,放置内容,作为默认显示内容,当外部调用给组件时,若是没有指定内容,那么就会显示默认的内容
例如:
image

插槽-具名插槽

场景:组件内有多处不确定的结构
语法:

  • 多个slot使用name属性区分名字
  • 在父组件中通过template配合v-slot:名字 或者 #名字 来分发对应标签
    image

插槽-作用域插槽

作用域插槽:定义slot插槽的同时,是可以传值的,给插槽上可以绑定数据,。将来在使用时可以用。

场景:封装表格组件

  • 1.父传子,动态渲染表格内容
  • 2.利用默认插槽,定制操作列
  • 3.删除或者查看都需要用到当前项的id,属于组件内部的数据,通过作用域插槽传值绑定。

例如:
image

在上图中,表格是一个组件,里面的数据都是不同的,同时对应的操作也是不同的。

通过上例案例,引出插槽的使用步骤:

  • slot标签,以添加属性的方式传值
    <slot :id="item.id" msg='测试'></slot>
  • 所有添加的属性,都会被收集到一个对象中
    {id: 3, msg:'测试'}
  • 在template中,通过#插槽名="obj"接收,默认插槽名为default
<!-- 给组件传值 list-->
<MyTable :List='list'>
    <!-- 默认插槽的名称是default,如果是带有名称的插槽则 #插槽名,其中object是组件传递过来的值-->
    <template #default="object">
        <button @click='del(object.id)'>删除</button>
    </template>
</MyTable>

代码示例:
image

注意:在 <slot:id = "item.id"></slot>中,这里传递的数据是一个对象:例如传递了一条
{id:1,name:'zzz'}这样的数据

效果展示:
image

可以看到,同一个组件显示了不同的数据,同时对应的的操作也不同,这就是作用域插槽提供数据回传实现的操作
本质上来说,还是插槽的基本使用,在基本使用的基础上添加了传值的功能

标签:slot,Vue,作用域,插槽,默认,内容,组件
From: https://www.cnblogs.com/zgf123/p/17827150.html

相关文章

  • Vue 实验
    项目初始化#前提:包管理器安装vue-clivuecreate项目名称Vue2实验目的了解Vue2的组件实现机制数据绑定机制双向绑定:input单向绑定父组件→子组件:父组件传入的参数组件→用户:页面内部参数属性监听机制:被监听的参数实验内容实现一个简单的组件,体现......
  • vue自定义指令
    app.vue<template><divclass=""><!--自定义指令全局<inputv-focustype="text"name=""id=""><br>自定义指令局部<inputv-focus2type="text"name=""id="&......
  • Vue自定义指令
    自定义指令根据自定义的指令,可以封装一些dom操作,扩展额外的功能全局注册-语法全局注册是在min.js文件中去定义的Vue.directive('指令名',{//inserted:钩子是一个自定义指令的生命周期钩子函数之一。它会在被绑定的元素插入到父节点时调用。"inserted"(el){......
  • vue项目配置国际化
    1、安装vue-i18n+js-cookie插件npminstallvue-i18n-Snpminstalljs-cookie--save即在package.json中dependencies节点添加vue-i18n"vue-i18n":"7.3.2",2、配置多语言文件src目录下创建lang目录,存放国际化文件此处包含三个文件,分别是index.jszh.jsen.js//index.jsim......
  • Vue中的异步更新和 $nextTick
    场景引入需求:当用户点击编辑按钮后,显示一个弹窗,该弹窗有一个文本框,使得文本框自动聚焦看似代码如下:this.isShowEdit=true;//显示输入框this.$refs.inp.focus();//获取焦点代码看似没有问题,显示文本框后,让文本框聚焦,但是在vue中却不能实现,这是由于vue是异步更新Dom的t......
  • vue2.0,把vform666、workFlow开源组件集成到vue-admin-template框架上心得体会
    以上三个都是vue2版本的开源项目,有的已经有vue3版本了,我把他们集成到一起,是出于练习的目的,也是消磨时间。vue-admin-template是一个很基础简洁的后台管理系统框架;vform666是可以用作表单低代码开发的组件项目;workFlow是模仿钉钉的工作流的组件项目,这三个项目在gitee上都能搜索到,......
  • Vue中的ref和$refs
    ref和$refs作用:利用ref和$refs可以用于获取dom元素,或组件实例特点:查找范围->当前组件内(更精确稳定)注意:在操作ref获取dom元素时,最快也得是mounted时期获取,也就是页面渲染之后使用步骤:目标标签-添加ref属性<divref="chartRef">我是div标签</div>通过this.$re......
  • Vue2中的父子通信
    父子通信流程图:父组件通过props将数据传递给子组件子组件利用$emit通知父组件修改更新父组件传递子组件注意点但是需要注意的是,通过props传递的数据是只读状态的,也就是说,我们不能去修改这个值。注意:props是只读的,如果直接对props中的数据进行修改,Vue就会发出警告。如果......
  • vue 项目改为微应用后,原本的项目地址打不开为什么?
    当将Vue项目改为微应用之后,需要进行一些配置才能正常运行。首先,确保微应用项目的依赖中已经添加了qiankun,并在主应用的main.js中进行了相关配置。可以参考qiankun官方文档来配置主应用。在进行部署时,需要注意以下几点:跨域配置:微应用可能会存在跨域请求的问题。在部署时,需确保主应用......
  • 记录--啊?Vue是有三种路由模式的?
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助众所周知,vue路由模式常见的有history和hash模式,但其实还有一种方式-abstract模式(了解一哈~)别急,本文我们将重点逐步了解:路由+几种路由模式+使用场景+思考+freestyle路由概念路由的本质就是一种对......