slot 的用法

server/2024/10/11 13:23:19/
htmledit_views">

1.常规

slot是让一个组件预留插槽,用于扩展性设计。例如一个Window组件这么设计

html"><div class="window"><slot></slot></div>

那么使用者

html"><Window><span>xx</span></Window>

就等同于

html"><div class="window"><span>xx</span></div>

2.slot是有名字的

一个组件可以在不同的位置预留不同的插槽,那么使用的时候怎么区分插槽,这里就需要在设计和使用的时候都指明插槽的名字
例如一个Window组件这么设计:

html"><div class="window"><div class="herder"><slot name="header"></slot></div><div class="body"><slot></slot></div><div class="footer"><slot name="footer"></slot></div>
</div>

那么使用者

html"><Window>
<template #header>
<span>我在header</span>
</template>
<template #footer>
<span>我在footer</span>
</template>
<span>我在body</span>
</Window>

等同于

html"><div class="window"><div class="herder"><span>我在header</span></div><div class="body"><span>我在footer</span></div><div class="footer"><span>我在footer</span></div>
</div>

像前面的常规例子里面,没有名字的情况,其实也有名字的,名字叫default,也可以采用跟具名slot的写法一样使用,default的slot无需使用template包裹起来

3.slot可以把组件的参数传递给子组件

例如一个Window组件这么设计:

html"><div class="window"><slot :data1="data1" :data2="data2"></slot></div>

调用者:

html"><Window>
<template #default="{data1,data2}">
<span>xx{{data}},{{data2}}</span>
</template>
</Window>

这样在子组件就能访问到父组件的data1,data2的数据

4.我们希望调用者在传递了template的内容时使用template的内容,没有的时候使用其他默认内容

例如,我们一个Window组件,默认都是底部一个提交和取消按钮,但也可以扩展让调用者随便换别的内容,可以这么写

html"><div class="window"><div class="footer"><slot name="footer"><button>提交</button><button>取消</button></slot></div>
</div>

slot包裹起来的内容就是默认内容,如果有子组件有使用temple名字是footer,就会覆盖slot的内容,即看不到提交和取消按钮 

5.slot如何跨多个子组件传递

例如A组件有多个solt,B组件对A组件进行了封装,必然需要支持调用B组件的时候,能把solt的特性也支持,这个时候B组件就需要传递其调用者的slot

B组件的一个解决方案

html" title=javascript>javascript">const slots = useSlots();//获取所有slots
html">//在模板对应组件的位置遍历出来,v-slot等同#,指明slot的名字,也是遵顼slot的用法,套多一层
<templatev-for="(item, key, i) in slots":key="i"v-slot:[key]="{ model, formitem }"
><slot :name="key" :model="model" :formitem="formitem"></slot>
</template>


http://www.ppmy.cn/server/46550.html

相关文章

IP代理池是什么?

从事跨境行业的朋友们总会有一个疑问&#xff0c;为什么自己所合作的IP代理商的IP在使用的过程中账号会有莫名封禁的问题&#xff0c;会不会是自己在使用的过程中错误的操作违反了平台的规则&#xff0c;其实不然有可能会是IP代理池纯净度不高的问题&#xff0c;有可能自己在使…

函数的创建和调用

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 提到函数&#xff0c;大家会想到数学函数吧&#xff0c;函数是数学最重要的一个模块&#xff0c;贯穿整个数学学习过程。在Python中&#xff0c;函数…

电机控制系列模块解析(23)—— 同步机初始位置辨识

一、两个常见问题 为什么感应电机&#xff08;异步机&#xff09;不需要初始位置辨识&#xff1f;&#xff08;因此感应电机转子磁场在定子侧进行励磁&#xff0c;其初始位置可以始终人为定义为0&#xff09; 为什么同步磁阻电机需要初始位置辨识&#xff1f;&#xff08;因为…

kali中切换python版本

kali中切换python版本 在日常使用的过程中&#xff0c;可以通过一些工具来做打靶环境&#xff0c;或者工具的启动&#xff0c;都和python关联&#xff0c;而有时存在工具安装&#xff0c;或者运行的时候出现报错&#xff0c;这时候极大可能是因为我们本地的kali中python的版本不…

WPF Binding对象、数据校验、数据转换

在WinForm中&#xff0c;我们要想对控件赋值&#xff0c;需要在后台代码中拿到控件对象进行操作&#xff0c;这种赋值形式&#xff0c;从根本上是无法实现界面与逻辑分离的。 在WPF中&#xff0c;微软引入了Binding对象&#xff0c;通过Binding&#xff0c;我们可以直接将控件与…

HTML大雪纷飞

目录 写在前面 HTML简介 完整代码 代码分析 运行结果 系列文章 写在后面 写在前面 小编又又又出现啦&#xff01;这次小编给大家带来大雪纷飞HTML版&#xff0c;不需要任何的环境&#xff0c;只要有一个浏览器&#xff0c;就可以随时随地下一场大雪哦&#xff01; HTM…

Pycharm编辑器下自定义模块导入报错:no module named问题

相信很多使用pycharm 社区版编写python 程序的初学者都会遇到这样一个看似简单但是一时半刻找不到解决头绪的问题&#xff1a; 在同个目录下导入自己编写的模块到主程序的过程中&#xff0c;直接import的时候会报错&#xff1a;ModuleNotFoundError。 通过各种方法尝试以后还是…

把Python写的程序打包成exe应用文件

1.python开发程序&#xff0c;是直接运行的&#xff0c;没有生成运行包的过程&#xff0c;如果需要生成运行包&#xff0c;要做额外操作。 2.用pyinstaller这个库生成python写的软件应用程序。 3.打开控制台程序&#xff0c;使用pip指令安装 pip install pyinstaller&#xff0…