当前位置: 首页 > 编程日记 > 正文

Vue.js slots: 为什么你需要它们?

也许你已经看过了Vue.js slots的文档。我对这个功能从“为什么你可能需要它”到“没有它我怎么可能工作”的态度转变非常快。
虽然文档已经解释了它的概念,但是这里有一个关于slots怎么改进应用程序代码库的真实例子。
在我看来,slots是vue最有用和最有趣的特性之一。虽然这是web组件所推荐的标准,但是我不知道有其他框架已经实现了这一特性。解释slots的作用很简单,但是很难解释它为什么有用(如果不使用“可组合性”这个术语),所以我要给你一个使用例子。

假设你的app有很多表单,表单包含几个部分:

  • 表单头部:包含关于表单的信息
  • 表单元素:供用户输入
  • 按钮

现在你想要把表单抽象为一个独立组件。你那些使用react和angular的同事告诉你,你需要使用类似React的组合vs继承或者Angular1的Transclude这样的特性,于是你找到了slots的文档。

你创建了这样一个组件:

<!-- FormHelper.vue -->
<form class="form"><h3>{{ title }}</h3><slot></slot><!-- children will go here --><button>Submit</button>
</form>

使用方法如下:

<!-- App.vue -->
<form-helper title="Password Reset"><input type="text" name="name" value=""><input type="text" name="email" value="">
</form-helper>

这样就可以正常运行了。可是,产品告诉你,一个特定的表单需要一个文本块来获得帮助信息的标题,按钮名要改为“Request”。这超出了“children”能做的范围。

<!-- FormHelper.vue -->
<form class="form"><h3>{{ title }}</h3><div :v-if="hasHelp">{{ helpMessage }}</div><slot></slot><!-- children will go here --><button>{{ customButtonName }}</button>
</form>

上述代码可能会出现一些问题,如果需要更多按钮、更多交互等等这些情况,怎么办?幸好,vuejs提供了一个更简洁的解决方案:具名slots。于是,你把代码改成下面这样:


<!-- FormHelper.vue -->
<form class="form"><h3>{{ title }}</h3><slot name="help"></slot><slot name="elements"></slot><!-- children will go here --><slot name="buttons"></slot>
</form>

使用方法:

<!-- App.vue -->
<form-helper title="Request Form"><div slot="help">Please ask your manager before requesting hardware.</div><div slot="elements"><input type="text" name="item_name" value=""><input type="text" name="item_value" value=""></div><div slot="buttons"><button type="button" name="button">Request</button></div>
</form-helper>

在我看来,关键思想是:

将slots当作传递给子组件的属性。就像传递字符串、整数和对象,而slots是传递一个子dom树,让子组件可以在任何需要的地方使用。

使用slots的其他场景:

  • 通用的模态窗
  • 类似bootstrap的面板和自定义内容这样的事情

使用slots的更多优点:

  • 子组件用于样式和展示,业务逻辑都保留在父元素中。
  • 如果没有传递内容给slots,就不会展示东西。这让你可以很好地复用它们,并且只在你想要的slots中传递。

相关文章:

apache httpd server安装的一个问题

问题&#xff11;&#xff1a; 启动bin/apachectl start的时候&#xff1a; 发现报错&#xff1a;httpd: bad user name daemon 解决方法&#xff1a; groupadd daemon useradd -g daemon daemon 若没有配置合适PATH常量&#xff0c;则可以找 /usr/sbin/groupadd&#xff0c…

telnet 如何退出

ctrl]&#xff0c;然后再输入q就可以退出了。转载于:https://www.cnblogs.com/rethink/archive/2009/10/29/1591898.html

TensorFlow 2.0新特性解读,Keras API成核心

来源 | Google TensorFlow 团队2018 年 11 月&#xff0c;TensorFlow 迎来了它的 3 岁生日&#xff0c;我们回顾了几年来它增加的功能&#xff0c;进而对另一个重要里程碑 TensorFlow 2.0 感到兴奋 &#xff01;TensorFlow 2.0 将专注于 简单性 和 易用性&#xff0c;具有以下更…

列选主元guass消去法

200701020110 07计算机 王再#include <iostream.h>#include <iomanip.h>#include <stdlib.h>void main(){ int flag1;input(); //输入方程 while(flag){ print_menu(); //打印主菜单}void print_menu(){ system("cls");cout<…

Mac 下 IDEA 启动慢的问题

转自&#xff1a; http://blog.csdn.net/KingBoyWorld/article/details/73440717 从控制台来看&#xff0c;每次都会连接本地地址(127.0.0.1)&#xff0c;问题可能就出在这里。 修改本地/etc/hosts文件&#xff0c;添加以下内容: 127.0.0.1 localhost <hostname&g…

研发投入超876亿的华为,将如何进击云+AI?

人工智能作为下一轮科技革命的关键元素&#xff0c;正在进入越来越多的行业&#xff0c;用 AI 的技术和理念去解决现在和未来的问题&#xff0c;将是企业构建竞争力的关键。在去年 10 月召开的华为全联接大会上&#xff0c;华为轮值董事长徐直军详细阐述了华为的 AI 战略&#…

Bash脚本: 根据关键字做替换

根据某个文件的关键字做替换 #!/bin/bashkvawk -F "" { if(NF2) print $1""$2 } ./zuanshi_servic_test.propertiesfor kv in ${kv[]};dokecho $kv | awk -F "" {print $1}vecho $kv | awk -F "" {print $2} | awk -F "\r" …

Git学习系列之一些常用的Git命令收录更新ing

不多说&#xff0c;直接上干货&#xff01; 前言 对于Git工具&#xff0c;有必要整理和总结一些常用实用的命令。 http://p.primeton.com/articles/53cce3a3e138236138000026 https://www.zhihu.com/question/22932048 http://blog.csdn.net/w410589502/article/details/536063…

普通域账号客户端计算无关机选项

组策略-》计算机配置-》安全设置-》本地策略-》用户权限分配-》关闭系统把DOMIAN USERS 组加进去我是在Default Domain Policy 里面加的转载于:https://blog.51cto.com/zhangjunjie/219613

罗永浩“咬定”微信不放松

作者 | 胡巍巍来源 | CSDN&#xff08;CSDNnews&#xff09;昨天&#xff0c;1月15日&#xff0c;听起来是很普通的一天。但是&#xff0c;历史上的这一天——公元8年1月15日&#xff0c;是王莽建立新朝、西汉结束的日子。2011年后的这一天&#xff0c;有一个八岁的国民社交软件…

Windows Ruby使用Mysql环境配置

windows下Ruby使用mysql时候报错&#xff1a; Incorrect MySQL client library version! This gem was compile d for 6.0.0 but the client library is 5.1.45 经过查找找到了解决方案&#xff1a; 1. 下载mysql-connector-c-noinstall-6.0.2-win32.zip http://dev.mysql.c…

Node.js与Sails~方法拦截器policies

policies sails的方法拦截器类似于.net mvc里的Filter&#xff0c;即它可以作用在controller的action上&#xff0c;在服务器响应指定action之前&#xff0c;对这个action进行拦截&#xff0c;先执行policies的策略&#xff0c;当条件通过&#xff0c;会next()它&#xff0c;继…

MySQL性能与磁盘读写的关系及优化策略

作者&#xff1a;kider出处&#xff1a;MySQLpub.com转贴请表明作者和出处并不能用于商业目的。这些天&#xff0c;对一个场地服务器慢的情况&#xff0c;进行了监控跟踪&#xff0c;也得出一些好的结论。现在记录一些过程&#xff0c;列出可以供参考的部分&#xff0c;同时有一…

今晚8点直播 | 详解微软小冰全双工语音对话技术

微软小冰第六代发布会上正式宣布上线全新的共感模型&#xff0c;同时也开始公测一种融合了文本、全双工语音与实时视觉的新感官。这项新技术可以实时预测人类即将说出的内容&#xff0c;实时生成回应&#xff0c;并控制对话节奏&#xff0c;从而使长程语音交互成为可能。而采用…

httpd.2.4虚拟主机配置测试

测试目标&#xff1a;三个虚拟主机&#xff0c;要求如下vhost1&#xff1a; phpMyAdmin, 同时提供https服务&#xff1b;vhost2: wordpress配置过程&#xff1a;一、配置vhost11、首先配置vhost1&#xff0c;先搭建私有CA在172.16.20.242上搭建私有CA&#xff1a; (1) 创建私钥…

视频批量转换为FLV的软件开发总结(1)——思想总结篇

视频批量转换为FLV的工作中&#xff0c;完全是因为项目中用到流媒体服务器管理发布视频。原始的数据可能是.mpg、.avi等格式的&#xff0c;这就需要大量的转换工作量&#xff0c;批量转换工具的需求很明显了。 原始准备使用外面的专门的视频转换软件Total Video Converter&…

https简单配置

SSL会话过程&#xff08;1&#xff09;客户端发送可供选择的加密方式&#xff0c;并向服务器请求证书&#xff08;2&#xff09;服务器端发送证书以及选定的加密方式给客户端&#xff08;3&#xff09;客户端取得证书并进行证书验证&#xff1b;如果新人给其发证书的CA&#xf…

突破电信3G宽带对网页浏览的上网限制

从上周开始用我189的手机卡插入到我的无线上网卡中就不能正常打开网页了&#xff0c;其它的IM&#xff08;如QQ、旺旺等&#xff09;都正常。ping www.sina.com.cn这些网址也是很正常的。foxmail收邮件也很正常。本来还想可能是网络比较忙或者其它的什么原因&#xff0c;但跟踪…

ClassLoader知识收集

阅读提示&#xff1a;全文认真阅读大约需要1个半小时时间&#xff0c;如果你需要在IDE中验证并理解&#xff0c;大约需要3个小时&#xff0c;如果你想自己写个类似的类加载器并调试&#xff0c;估计还需要3个小时。该知识点的掌握检测与否&#xff0c;你可以尝试其回答Java每日…

Linux下PS1设置

在测试机上每次执行命令总要用sudo -u ads开头&#xff0c;比较麻烦。索性用&#xff1a; sudo su ads 就可以直接用ads用户名进行操作了。 但是用这种方式之后&#xff0c;命令的前缀就变成了"bash-3.2$ "&#xff0c;相当不习惯&#xff0c;经过网上搜索&#xff0…

Android API 中文 (51) —— ZoomButtonsController

一、结构 public class ZoomButtonsController extends View implements View.OnTouchListener java.lang.Object android.widget.ZoomButtonsController 二、概述 ZoomButtonsController处理缩放控件的显示和隐藏并且定位其在相关父视图的位置。他也可以做为缩放控件的…

火爆GitHub的《机器学习100天》,有人把它翻译成了中文版

作者 | 红色石头转载自AI有道&#xff08;ID:redstonewill&#xff09;今天给大家介绍一个在 GitHub 上非常火的机器学习实战项目&#xff0c;叫做 100-Days-Of-ML-Code&#xff0c;中文名为《机器学习 100 天》。目前该项目已经收获了 1.7w stars 了。下面是项目地址&#xff…

新浪程序员加班改bug,竟错失77万年会大奖

作者 | 伍杏玲转载自CSDN&#xff08;CSDNnews&#xff09;好消息&#xff01;还有不到二十天就放大假&#xff01;大伙盼着过年盼着年会盼着抽中大奖&#xff01;昨天有一位新浪码农真的抽中头等奖了——2000 股新浪股票&#xff0c;价值 77 万人民币啊&#xff01;然并卵&…

Linux简单的颜色设置

通过alias&#xff0c;在~/.bashrc里配置&#xff1a; alias l.ls -d .* --colortty alias llls -l --colortty alias lsls --colortty alias vivim alias whichalias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde

第106天:Ajax中同步请求和异步请求

同步请求和异步请求的区别 1、同步是指&#xff1a;发送方发出数据后&#xff0c;等接收方发回响应以后才发下一个数据包的通讯方式。 用户填写所有信息后&#xff0c;提交给服务器&#xff0c;等待服务器的回应&#xff08;检验数据&#xff09;&#xff0c;是一次性的。信息错…

排除一例电脑启动故障

晚上一上班&#xff0c;版式组小连来电话&#xff0c;说是排版过程中&#xff0c;电脑突然死机&#xff0c;重启&#xff0c;提示&#xff24;isk I/O error:status00008036 NTDETECT失败断电&#xff0c;拆机&#xff0c;放电&#xff08;开机键反复按下松开按下松开几次&…

登陆成功率 99%,云知声携手平安好医生推声纹登录系统

近日&#xff0c;云知声宣布与医疗健康生态平台平安好医生&#xff08;01833.HK&#xff09;共同研发的“声纹登录系统”&#xff08;又称声纹锁&#xff09;经过多次模型优化和升级迭代后&#xff0c;登录成功率接近 99%&#xff0c;达行业一流水准。 声纹识别(Voiceprint Rec…

知方可补不足~开发人员可以自己定义VS文件模版

团队开发&#xff0c;最重要的是什么&#xff1f; 统一的规范&#xff0c;对于一个团队&#xff0c;在开发项目之前&#xff0c;必须要先告诉大家项目的规范是什么&#xff0c;而开发人员在实际当中再去执行这个规范&#xff0c;对于规范事实上是个很宏观的概念&#xff0c;它可…

sql server日志占用空间过大的问题

一、关于日志的基本知识&#xff1a;在 SQL Server 2000 和 SQL Server 2005 中&#xff0c;每个数据库都至少包含一个数据文件和一个事务日志文件。SQL Server 在该数据文件中以物理方式存储数据。事务日志文件存储您对 SQL Server 数据库执行的所有修改的详细信息&#xff0c…

svn 回归某一个特定版本

svn回归某一个特定版本&#xff1a; 先用svn log查看回归版本的版本号 version 然后用命令 svn up -r version