详解Vue组件插槽的使用以及调用组件内的方法


Posted in Javascript onNovember 13, 2018

组件传参

通过给组件传递参数, 可以让组件变得更加可扩展, 组件内使用props接收参数

export default {
 props: ['options'],
 data(){
 return {}
 }
}

但是这个方法有局限性, 例如我写了一个对话框组件, 对话框的内容是自定义的
如果我只是显示文字的话, 我可以简单的将字符串传进去props: ['message']
但是如果需要在其中添加一个按钮的话, 这种方法就显得很笨重了, 所以我们用另一种办法 插槽

slot 插槽

slot的使用就像它的名字一样, 在组件内定义一块空间, 取名为slotA

<div class="dialog">
 我是对话框
 <slot name="slotA"></slot>
</div>

在组件外, 我们可以往插槽里填入任何元素, dialog-a为组件的名称

<dialog-a :options="hello">
 <template slot="slotA">
 <button>按钮</button>
 // ... 可以是任何元素
 </template>
</dialog-a>

slot-scope 获取插槽作用域

前面讲的只是实现往组件内加入元素, 但是并没有和组件的数据有任何的交互
slot-scope的作用就是把组件内的码农之家数据带出来

<div class="dialog">
 我是对话框<br>
 {{message}}
 <slot name="slotA" :message="message"></slot>
</div>

在组件外就可以得到其中的message

<dialog-a :options="hello">
 <template slot="slotA" slot-scope="scope">
 <button>{{scope.message}}</button>
 </template>
</dialog-a>

ref 调用组件内的方法

使用this.$refs找到组件后, 就可以调用其中methods中的方法

<dialog-a ref="dialogA"></dialog-a>
test(){
 this.$refs.dialogA.func()
}
Javascript 相关文章推荐
JavaScript DOM 编程艺术(第2版)读书笔记(JavaScript的最佳实践)
Oct 01 Javascript
Js获取数组最大和最小值示例代码
Oct 29 Javascript
JS计算网页停留时间代码
Apr 28 Javascript
js图片预加载示例
Apr 30 Javascript
yepnope.js使用详解及示例分享
Jun 23 Javascript
jQuery实现带动画效果的多级下拉菜单代码
Sep 08 Javascript
js图片轮播手动切换特效
Jan 12 Javascript
5种JavaScript脚本加载的方式
Jan 16 Javascript
JavaScript累加、迭代、穷举、递归等常用算法实例小结
May 08 Javascript
jquery引入外部CDN 加载失败则引入本地jq库
May 23 jQuery
基于Node.js的大文件分片上传示例
Jun 19 Javascript
layui实现form表单同时提交数据和文件的代码
Oct 25 Javascript
Vue实现一个无限加载列表功能
Nov 13 #Javascript
Vue实现移动端页面切换效果【推荐】
Nov 13 #Javascript
vue中slot(插槽)的介绍与使用
Nov 12 #Javascript
vuex的module模块用法示例
Nov 12 #Javascript
React手稿之 React-Saga的详解
Nov 12 #Javascript
基于游标的分页接口实现代码示例
Nov 12 #Javascript
React Hooks的深入理解与使用
Nov 12 #Javascript
You might like
php 无限极分类
2008/03/27 PHP
PHP 程序员的调试技术小结
2009/11/15 PHP
php使用strtotime和date函数判断日期是否有效代码分享
2013/12/25 PHP
PHP 7的一些引人注目的新特性简单介绍
2015/11/08 PHP
PHP实现求两个字符串最长公共子串的方法示例
2017/11/17 PHP
php快速导入大量数据的实例方法
2019/09/23 PHP
PHP大文件及断点续传下载实现代码
2020/08/18 PHP
PHP中isset、empty的用法与区别示例详解
2020/11/05 PHP
js跨域问题之跨域iframe自适应大小实现代码
2010/07/17 Javascript
通过JavaScript使Div居中并随网页大小改变而改变
2013/06/24 Javascript
JavaScript实现维吉尼亚(Vigenere)密码算法实例
2013/11/22 Javascript
iframe的onreadystatechange事件在firefox下的使用
2014/04/16 Javascript
javascript生成随机颜色示例代码
2014/05/05 Javascript
JQuery对表单元素的基本操作使用总结
2014/07/18 Javascript
JS实现超过长度限制后自动跳转下一款文本框的方法
2015/02/23 Javascript
AngularJS基础学习笔记之指令
2015/05/10 Javascript
jQuery实现滚动切换的tab选项卡效果代码
2015/08/26 Javascript
javascript模块化简单解析
2016/04/07 Javascript
JS组件系列之Bootstrap table表格组件神器【终结篇】
2016/05/10 Javascript
浅谈angularJS中的事件
2016/07/12 Javascript
实例解析jQuery中如何取消后续执行内容
2016/12/01 Javascript
JavaScript调试之console.log调试的一个小技巧分享
2017/08/07 Javascript
Vue实现web分页组件详解
2017/11/28 Javascript
JS实现秒杀倒计时特效
2020/01/02 Javascript
[15:35]教你分分钟做大人:天怒法师
2014/10/30 DOTA
python不带重复的全排列代码
2013/08/13 Python
Python中的连接符(+、+=)示例详解
2017/01/13 Python
python dict 字典 以及 赋值 引用的一些实例(详解)
2017/01/20 Python
基于anaconda下强大的conda命令介绍
2018/06/11 Python
Django+Django-Celery+Celery的整合实战
2021/01/20 Python
Nicole Miller官方网站:纽约女装品牌
2019/09/14 全球购物
Fossil德国官网:化石手表、手袋、珠宝及配件
2019/12/07 全球购物
英国领先的男装设计师服装独立零售商:Repertoire Fashion
2020/10/19 全球购物
super()与this()的区别
2016/01/17 面试题
统计每一学生的平均成绩
2014/06/06 面试题
2019年共青团工作条例最新版
2019/11/12 职场文书