介绍
为了让组件可以组合,我们需要一种方式来混合父组件的内容与子组件自己的模板。这个过程被称为 内容分发 (或 “transclusion” 如果你熟悉 Angular)。Vue.js 实现了一个内容分发 API,使用特殊的 'slot' 元素作为原始内容的插槽。
编译作用域
在深入内容分发 API 之前,我们先明确内容在哪个作用域里编译。假定模板为:
{{ message }}
message 应该绑定到父组件的数据,还是绑定到子组件的数据?答案是父组件。组件作用域简单地说是:
一个常见错误是试图在父组件模板内将一个指令绑定到子组件的属性/方法:
假定 someChildProperty 是子组件的属性,上例不会如预期那样工作。父组件模板不应该知道子组件的状态。
如果要绑定作用域内的指令到一个组件的根节点,你应当在组件自己的模板上做:
Vue.component('child-component', { // 有效,因为是在正确的作用域内 template: 'Child', data: function () { return { someChildProperty: true } } })
类似地,分发内容是在父作用域内编译。
单个slot
除非子组件模板包含至少一个 'slot' 插口,否则父组件的内容将会被丢弃。当子组件模板只有一个没有属性的 slot 时,父组件整个内容片段将插入到 slot 所在的 DOM 位置,并替换掉 slot 标签本身。
最初在 'slot' 标签中的任何内容都被视为备用内容。备用内容在子组件的作用域内编译,并且只有在宿主元素为空,且没有要插入的内容时才显示备用内容。
示例代码:
我是父组件的标题
初始内容1
初始内容2
Vue.component('my-component',{ template:`我是子组件的标题
只有在没有要分发的内容是才出现。 `, }) new Vue({ el:'#app' })运行结果如下:
将html部分代码修改为以下代码:
我是父组件的标题
则运行结果如下:
具名slot
'slot' 元素可以用一个特殊的属性 name 来配置如何分发内容。多个 slot 可以有不同的名字。具名 slot 将匹配内容片段中有对应 slot 特性的元素。
仍然可以有一个匿名 slot,它是默认 slot,作为找不到匹配的内容片段的备用插槽。如果没有默认的 slot,这些找不到匹配的内容片段将被抛弃。
如以下例子:
这是标题
第一个段落
第二个段落
第三个段落
联系信息
Vue.component('my-component',{ template:` `, }) new Vue({ el:'#app' })运行结果如下:
在组合组件时,内容分发 API 是非常有用的机制。
作用域插槽
2.1.0新增
作用域插槽是一种特殊类型的插槽,用作使用一个 (能够传递数据到) 可重用模板替换已渲染元素。
在子组件中,只需将数据传递到插槽,就像你将 props 传递给组件一样。
示例代码:
hello from parent
{{props.text}}
Vue.component('my-component',{ template:` `, props:['text'] }) new Vue({ el:'#app' })运行结果:
在父级中,具有特殊属性 scope 的 <'template'> 元素必须存在,表示它是作用域插槽的模板。scope 的值对应一个临时变量名,此变量接收从子组件中传递的 props 对象。
作用域插槽更具代表性的用例是列表组件,允许组件自定义应该如何渲染列表每一项:
{{props.text}} Vue.component('my-component',{ template:``, props:['text','items'] }) new Vue({ el:'#app', data:{ items:[ {text:'item1'}, {text:'item2'}, {text:'item3'}, ] } })
作用域插槽也可以是具名的
运行结果:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
写下你的评论吧 !推荐阅读
最新计算机专业原创毕业设计参考选题都有源码+数据库是近期作品ling取参考你的选题刚好在下面有,有时间看到机会给您发1ssm资源循环利用2springboot校园考勤系统3ssm防 ... [详细]蜡笔小新 2024-12-19 11:39:56 本文深入探讨了JavaScript中实现继承的四种常见方法,包括原型链继承、构造函数继承、组合继承和寄生组合继承。对于正在学习或从事Web前端开发的技术人员来说,理解这些继承模式对于提高代码质量和维护性至关重要。 ... [详细]蜡笔小新 2024-12-18 11:08:28 案例1:在子组件中两个按钮1和-1,点击后修改count整个操作的过程还是在子组件中完成,但是之后的展示交给父组件这样,我 ... [详细]蜡笔小新 2024-12-11 13:03:12 本文详细介绍了如何使用JavaScript实现数据的双向绑定,包括MVVM架构的基本概念、不同框架下的实现方式以及具体的代码示例。 ... [详细]蜡笔小新 2024-12-11 05:40:01 前言:小写转大写,可以用过滤器实现,但当使用v-model时就不行了,这里有解决方案。转载请注明出处:http ... [详细]蜡笔小新 2024-12-06 10:35:33 本文详细介绍了如何在Vue应用中利用Vuex的Mutations来更新和管理购物车的数据,包括添加、删除商品以及计算总价等操作。 ... [详细]蜡笔小新 2024-12-05 14:31:18 本文探讨如何在VueJS项目中通过配置vue.config.js文件实现多页面应用(MPA),特别是针对管理端和客户端的不同需求。 ... [详细]蜡笔小新 2024-12-02 11:22:01 本文详细记录了腾讯ABS云平台的一次前端开发岗位面试经历,包括面试过程中遇到的JavaScript相关问题、Vue.js等框架的深入探讨以及算法挑战等内容。 ... [详细]蜡笔小新 2024-11-19 12:59:38 作为一名新手开发者,我正在尝试使用 ASP.NET 和 Vue.js 构建一个单页面应用,涉及多个复杂组件(如按钮、图表等)。希望有经验的开发者能够提供指导。 ... [详细]蜡笔小新 2024-11-16 18:00:22 本文介绍如何使用 Oracle 存储函数查询特定员工的年收入。我们将详细解释存储函数的创建过程,并提供完整的代码示例。 ... [详细]蜡笔小新 2024-12-28 09:49:42 本文详细介绍如何从官方渠道下载并安装PyCharm集成开发环境(IDE),涵盖Windows、macOS和Linux系统,同时提供详细的安装步骤及配置建议。 ... [详细]蜡笔小新 2024-12-28 09:42:41 在 Windows 10 中,F1 至 F12 键默认设置为快捷功能键。本文将介绍几种有效方法来禁用这些快捷键,并恢复其标准功能键的作用。请注意,部分笔记本电脑的快捷键可能无法完全关闭。 ... [详细]蜡笔小新 2024-12-28 09:13:44 本文总结了2018年的关键成就,包括职业变动、购车、考取驾照等重要事件,并分享了读书、工作、家庭和朋友方面的感悟。同时,展望2019年,制定了健康、软实力提升和技术学习的具体目标。 ... [详细]蜡笔小新 2024-12-28 09:10:26
steveukuk这个家伙很懒,什么也没留下!Tags | 热门标签RankList | 热门文章
- 1VSCode与Gitee集成:项目提交的高效实践
- 2Debian系统中配置Locale环境
- 3Win11扩展卷无法使用?解决扩展卷灰色问题的指南
- 4解析与应用:validateThenCloseCursor() 方法详解
- 5武汉大学计算机学院研究生入学考试科目及专业方向
- 6解读《蓦山溪》:宋史浩的诗意世界
- 7解决 Android NDK 中 Native 方法未找到的错误
- 8使用JPA Criteria API构建动态查询条件
- 9深入解析 MySQL 自增 ID 在并发写入时的防重复机制
- 10如何用手机俯拍出横屏效果
- 11Photoshop 教程全解
- 12Linux设备驱动程序:异步时间操作与调度机制
- 13Python文本处理与可视化:分词及词云生成
- 14UnityGUI 扩展与自定义控件
- 15Scala 实现 UTF-8 编码属性文件读取与克隆
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved |京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有