vue 中slot 的具体用法

子组件

<template><div class="slotcontent"><ul><!--<slot></slot>--><li v-for="item in items">{{item.text}}</li></ul></div>
</template><script>export default{data(){return{items:[{id:1,text:'第1段'},{id:2,text:'第2段'},{id:3,text:'第3段'},]}}}</script><style scoped></style>

父组件

<template><div><h2>首页</h2><router-link to="/home/details">跳转到详情</router-link><p>父组件</p><slotshow><p>{{msg}}</p></slotshow></div>
</template><script>import slotshow from '../components/slotshow'export default{data(){return{msg:"测试内容"}},components:{slotshow}}
</script><style></style>

这种情况是如果要父组件在子组件中插入内容 ,必须要在子组件中声明slot 标签 ,如果子组件模板不包含<slot>插口,父组件的内容<p>{{msg}}</p>将会被丢弃。

当slot存在默认值<slot><p>默认值</p></slot>,且父元素在<slotshow></slotshow>中没有要插入的内容时,会显示<p>默认值</p>(p标签会去掉),当slot存在默认值,且父元素在<child>中存在要插入的内容时,则显示父组件中设置的值,

具名slot

<slot> 元素可以用一个特殊的属性 name 来配置如何分发内容。多个 slot 可以有不同的名字。具名 slot 将匹配内容片段中有对应 slot 特性的元素

var childNode = {template: `<div class="child"><p>子组件</p><slot name="my-header">头部默认值</slot><slot name="my-body">主体默认值</slot><slot name="my-footer">尾部默认值</slot></div>`,
};
var parentNode = {template: `<div class="parent"><p>父组件</p><child><p slot="my-header">我是头部</p><p slot="my-footer">我是尾部</p></child></div>`,components: {'child': childNode},
};

仍然可以有一个匿名 slot,它是默认 slot,作为找不到匹配的内容片段的备用插槽。匿名slot只能作为没有slot属性的元素的插槽,有slot属性的元素如果没有配置slot,则会被抛弃

var childNode = {template: `<div class="child"><p>子组件</p><slot name="my-body">主体默认值</slot><slot></slot></div>`,
};
var parentNode = {template: `<div class="parent"><p>父组件</p><child><p slot="my-body">我是主体</p><p>我是其他内容</p><p slot="my-footer">我是尾部</p></child></div>`,components: {'child': childNode},
};
<p slot="my-body">插入<slot name="my-body">中,<p>我是其他内容</p>插入<slot>中,而<p slot="my-footer">被丢弃

如果没有默认的 slot,这些找不到匹配的内容片段也将被抛弃

var childNode = {template: `<div class="child"><p>子组件</p><slot name="my-body">主体默认值</slot></div>`,
};
var parentNode = {template: `<div class="parent"><p>父组件</p><child><p slot="my-body">我是主体</p><p>我是其他内容</p><p slot="my-footer">我是尾部</p></child></div>`,components: {'child': childNode},
};

<p>我是其他内容</p><p slot="my-footer">都被抛弃

作用域插槽

作用域插槽是一种特殊类型的插槽,用作使用一个 (能够传递数据到) 可重用模板替换已渲染元素。

在子组件中,只需将数据传递到插槽,就像将 props 传递给组件一样

<span style="font-size: 16px;"><div class="child"><slot text="hello from child"></slot>
</div></span>

在父级中,具有特殊属性 scope 的 <template> 元素必须存在,表示它是作用域插槽的模板。scope 的值对应一个临时变量名,此变量接收从子组件中传递的 props 对象.

var <span style="color: #ffffff;">childNode</span> = {template: `<div class="child"><p>子组件</p><slot xxx="hello from child"></slot></div>`,
};
var parentNode = {template: `<div class="parent"><p>父组件</p><child><template scope="props"><p>hello from parent</p><p>{{ props.xxx }}</p></template></child></div>`,components: {'child': childNode},
};

如果渲染以上结果,得到的输出是

【列表组件】

作用域插槽更具代表性的用例是列表组件,允许组件自定义应该如何渲染列表每一项

var childNode = {template: `<ul><slot name="item" v-for="item in items" :text="item.text">默认值</slot></ul>`,data(){return{items:[{id:1,text:'第1段'},{id:2,text:'第2段'},{id:3,text:'第3段'},]}}
};
var parentNode = {template: `<div class="parent"><p>父组件</p><child><template slot="item" scope="props"><li>{{ props.text }}</li></template></child></div>`,components: {'child': childNode},
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/249801.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java基础教程:多线程基础(3)——阻塞队列

Java基础教程&#xff1a;多线程基础&#xff08;3&#xff09;——阻塞队列 快速开始 引入问题 生产者消费者问题是线程模型中的经典问题&#xff1a;生产者和消费者在同一时间段内共用同一存储空间&#xff0c;生产者向空间里生产数据&#xff0c;而消费者取走数据。 模拟情景…

001.Linux开机启动过程

相关Linux启动过程解析&#xff0c;此作为通用启动参考&#xff1a; 转载于:https://www.cnblogs.com/itzgr/p/10285833.html

学习vim 从常用按键开始

撤销 u 前进 ctrl r移动 下一个单词 w 当前单词首或上个单词首 b 当前单词尾或上个单词尾 e ---- 大写就是忽略标点符号 行首行尾 $^ 查询 /word 下一个 n 上一个 Nv 可视化操作命令 删除操作 x 删除光标处的字符&#xff0c;向后删除 nx …

element ui 中 el-menu 如何添加链接router-link标签

在vue项目中&#xff0c;使用elementui 框架&#xff0c;做一个后台管理系统 在写左边菜单&#xff0c;菜用了&#xff0c;elementui 提供的组件 &#xff0c; el-menu 组件。但是组件没有链接&#xff0c;而我们知道添加链接使用router-link标签代码如下&#xff1a; <el-…

使用fastjson的parseObject方法将json字符串转换成Map 或者List

fastjson 转换成map HashMap<String,String> map JSON.parseObject(jsonStr,new TypeReference<HashMap<String,String>>() {}); fastjson 转换成list List<Person> list new ArrayList<Person>(); list JSON.parseArray(jasonArray.toStri…

【01】《正则表达式必知必会》(已看)(仅存放)

【01】《正则表达式必知必会》 共149页。扫描版&#xff0c;中文版。Sams Teach Yourselef Regular Expressions in 10 minutesBen Forta著。杨涛 翻译【】魔芋&#xff1a;这本书已经没有用了。内容已吸收。内容较为基础&#xff0c;也很全面。** 附件列表 链接&#xff1a;ht…

vue-cli脚手架的.babelrc文件

{// 此项指明&#xff0c;转码的规则"presets": [// env项是借助插件babel-preset-env&#xff0c;下面这个配置说的是babel对es6,es7,es8进行转码&#xff0c;并且设置amd,commonjs这样的模块化文件&#xff0c;不进行转码["env", {"modules": …

Java秒杀业务架构设计之路

Java秒杀业务架构设计之路

疑难杂症,逐个下药

用户登陆&#xff08;三次输错机会&#xff09;且每次输错误时显示剩余错误次数&#xff08;提示&#xff1a;使用字符串格式化&#xff09; 三次登录: 1.让用户输入三次的机会,错一次的时候就要询问用户是否要继续 2.分别判断用户名和密码,如果用户名错误就提示用户错误,如果是…

JS性能分析(测试代码运行时间)

console.time("timer"); for(var i0;i<10000;i){} console.timeEnd("timer"); timer: 0.274169921875ms转载于:https://www.cnblogs.com/smzd/p/10647455.html

jsonp原生js跨域拿新浪数据插件封装【可扩展】

//修改了一个bug,增加了手动释放垃圾 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><meta http-equiv"X-…

Ansible基本命令

Ansible安装完成之后就自带很多命令&#xff0c;其中较常用的有7个&#xff1a; ansibleansible-docansible-galaxyansible-initansible-playbookansible-pullansible-vaultansible ansible -h Usage: ansible <host-pattern> [options] 对本机执行一个命令&#xff1a; …

Java高并发高性能分布式框架从无到有微服务架构设计

Java高并发高性能分布式框架从无到有微服务架构设计

Makefile中几种赋值

延时变量&#xff0c;只有被使用时才展开定义 : 立即变量&#xff0c;定义时的赋值立即有效 ? 条件变量&#xff0c;当变量为空时才赋值 追加赋值转载于:https://www.cnblogs.com/smzd/p/10695962.html

线程的基本协作和生产者消费者

协作基础&#xff08;wait/notify&#xff09; Java的根父类是Object&#xff0c;Java在Object类而非Thread类中&#xff0c;定义了一些线程协作的基本方法&#xff0c;使得每个对象都可以调用这些方法&#xff0c;这些方法有两类&#xff0c;一类是wait&#xff0c;另一类是no…

L1-016 查验身份证

L1-016 查验身份证 &#xff08;15 分&#xff09;一个合法的身份证号码由17位地区、日期编号和顺序编号加1位校验码组成。校验码的计算规则如下&#xff1a; 首先对前17位数字加权求和&#xff0c;权重分配为&#xff1a;{7&#xff0c;9&#xff0c;10&#xff0c;5&#xff…

什么是高并发,如何避免高并发

之前我将高并发的解决方法误认为是线程或者是队列可以解决&#xff0c;因为高并发的时候是有很多用户在访问&#xff0c;导致出现系统数据不正确、丢失数据现象&#xff0c;所以想到 的是用队列解决&#xff0c;其实队列解决的方式也可以处理&#xff0c;比如我们在竞拍商品、转…

.sync 修饰符的理解

正常 子组件&#xff1a; this.$emit(update:title, newTitle)父组件&#xff1a; <text-documentv-bind:title"doc.title"v-on:update:title"doc.title $event" ></text-document>简洁&#xff1a; <text-document v-bind:title.sync&quo…

L1-025 正整数A+B

题的目标很简单&#xff0c;就是求两个正整数A和B的和&#xff0c;其中A和B都在区间[1,1000]。稍微有点麻烦的是&#xff0c;输入并不保证是两个正整数。 输入格式&#xff1a; 输入在一行给出A和B&#xff0c;其间以空格分开。问题是A和B不一定是满足要求的正整数&#xff0c;…

到底多大才算高并发?

一、什么是高并发 定义&#xff1a; 高并发(High Concurrency)是使用技术手段使系统可以并行处理很多请求。关键指标&#xff1a; -响应时间(Response Time) -吞吐量(Throughput) -每秒查询率QPS(Query Per Second) -每秒事务处理量TPS(Transaction Per Second) -同时在…