Vue结合slot插槽分发父组件内容实现高度复用、更加灵活的dialog组件
写在前面
之前写过一篇关于vue实现dialog会话框组件的文章http://www.cnblogs.com/fozero/p/8546883.html,
讲到了如何实现一个vue对话框组件,其中涉及到了父组件和子组件的通信,这个不用多说,看我之前的文章就能明白,文章最后也说到了,我们可以使用
slot插槽来编写组件,slot用来分发内容到子组件中,从而实现组件的高度复用,编写的组件更加灵活。
还是结合对话框的例子,使用slot来实现对话框组件
注册一个名叫dialog-tip的全局组件
Vue.component('dialog-tip', {
template: '#dialog-tip',
props:['dialogShow','message'],
data:function(){
return {
content:''
}
},
methods:{
}
});
使用templete标签来定义这个组件
<template id="dialog-tip">
<div class="dialog_tip" v-if="dialogShow">
<div class="dialog_tip--mask"></div>
<div class="dialog_tip--content">
<div class="dialog_tip--content__txt">
<slot name="msg">请输入1-8000之间任意整数</slot>
</div>
<div class="dialog_tip--content__btns">
<slot>
<button class="btn">确定</button>
<button class="btn">重新输入</button>
<button class="btn">去注册</button>
</slot>
</div>
</div>
</div>
</template>
组件内容包括两部分 ,一个是提示内容,一个是button按钮,我们将要修改替换的内容使用slot包含起来,
这样父组件就可以分发内容到子组件里面了。
<div class="dialog_tip--content__txt">
<slot name="msg">请输入1-8000之间任意整数</slot>
</div>
<div class="dialog_tip--content__btns">
<slot>
<button class="btn">确定</button>
<button class="btn">重新输入</button>
<button class="btn">去注册</button>
</slot>
</div>
除了默认插槽,还可以定义具名插槽 ,如果组件中有好几个部分内容需要替换,我们可以为它定义一个name,例如:
<slot name="msg">请输入1-8000之间任意整数</slot>
这样在使用组件的时候,指定slot的name ,就会将这一部分内容替换掉,而不会替换其他的插槽内容
<p slot="msg">请输入正确手机号</p>
使用定义好的dialog组件
<dialog-tip message="hello" :dialog-show="dialogShow.tip3">
<p slot="msg">请输入正确手机号</p>
<button class="btn" @click="closeDialogTip('tip3')">确定</button>
</dialog-tip>
<dialog-tip message="hello" :dialog-show="dialogShow.tip4">
<p slot="msg">抱歉,没有此用户,请核实后输入</p>
<button class="btn" @click="closeDialogTip('tip4')">重新输入</button>
<button class="btn" @click="reg">去注册</button>
</dialog-tip>
如果不指定slot的名称,默认dialog-tip标签里面的内容会替换子组件中使用slot包含的内容部分,例如以上
使用slot指定了它的名称来替换子组件中的对应的slot部分,而没有使用slot指定名称的内容会默认将子组件中
没有定义具名插槽的部分内容替换掉。
需要注意的是,如果dialog-tip标签里没有定义需要分发的内容,那么子组件中会显示默认的插槽内容
关于更多的slot用法,请移步https://cn.vuejs.org/v2/guide/components-slots.html
最后
效果图

作者:fozero
声明:原创文章,转载请注明出处,谢谢!http://www.cnblogs.com/fozero/p/8974597.html
标签:vue,slot
Vue结合slot插槽分发父组件内容实现高度复用、更加灵活的dialog组件的更多相关文章
- 使用Vue的slot插槽分发父组件内容实现高度复用、更加灵活的组件
写在前面 之前写过一篇关于vue实现dialog会话框组件的文章http://www.cnblogs.com/fozero/p/8546883.html, 讲到了如何实现一个vue对话框组件,其中涉及 ...
- Vue 之 slot(插槽)
前言: vue中关于插槽的文档说明很短,语言又写的很凝练,再加上其和methods,data,computed等常用选项在使用频率.使用先后上的差别,这就有可能造成初次接触插槽的开发者容易产生“算了吧 ...
- vue2.0使用slot插槽分发内容
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- vue 之 slot插槽
插槽,也就是slot,是组件的一块HTML模板,这块模板显示不显示.以及怎样显示由父组件来决定. 实际上,一个slot最核心的两个问题这里就点出来了,父组件决定插槽显示或不显示以及怎样显示,子组件决定 ...
- vue中slot插槽
插槽就是vue实现的一套内容分发的API,将插槽元素作为承载分发内容的出口. 也就是说在组件模板中默认占用一个位置,当使用组件标签时候,组件标签的内容就会自动替换掉内容 slot中可以设置一些默认的内 ...
- 简单理解vue的slot插槽
slot的意思是插槽,想想你的电脑主板上的各种插槽,有插CPU的,有插显卡的,有插内存的,有插硬盘的,所以假设有个组件是computer,其模板是 <template> <div&g ...
- Vue中slot插槽的使用
- vue中slot组件的使用
插槽(Slot)是Vue提出来的一个概念,正如名字一样,插槽用于决定将所携带的内容,插入到指定的某个位置,从而使模板分块,具有模块化的特质和更大的重用性. Slot 是在组件模板中设置的用于在父组件中 ...
- slot插槽(学习笔记)
slot插槽(有默认值,也有名称)一般情况下通过名称进行匹配什么是插槽,有什么用?插槽相当于插入的一个东西,可以用来灵活的封装组件,比如说封装一个模态框对组件进行内容的定制,slot插槽,一对组件标签 ...
随机推荐
- 通过java把excel内容上传到mysql
mysql 表列名 num1,num2,num3,num4,num5,num6 表名Excle 上传的方法 package com.web.connection; import java.io.Fi ...
- [洛谷P3383][模板]线性筛素数-欧拉筛法
Description 如题,给定一个范围N,你需要处理M个某数字是否为质数的询问(每个数字均在范围1-N内) Input&Output Input 第一行包含两个正整数N.M,分别表示查询的 ...
- 关于block的循环引用的问题
在block的循环引用的问题上我们都知道如果在block内部修改外部的变量的时候,要加__block以防止循环引用的问题,但是如果block是当前对象的一个属性的时候,要修改当前对象的一个属性的时候就 ...
- python Django之文件上传
python Django之文件上传 使用Django框架进行文件上传共分为俩种方式 一.方式一 通过form表单进行文件上传 #=================================== ...
- spark2.1:rdd.combineByKeyWithClassTag的用法示例
测试spark版本: Spark context Web UI available at http://192.168.1.1:32735 Spark context available as 'sc ...
- POJ-1328 Radar Installation--区间选点问题(贪心)
题目链接: https://vjudge.net/problem/POJ-1328 题目大意: 假设陆地的海岸线是一条无限延长的直线,海岛是一个个的点,现需要在海岸线上安装雷达,使整个雷达系统能够覆盖 ...
- hdu1022 Train Problem I---模拟栈
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1022 题目大意: 车的进出站问题,先给出N个火车,再按序列一的方式进站,判断能否以序列二的方式出站,若 ...
- nginx 官方文档翻译
nginx(发音为"engine x")是一个由俄罗斯软件工程师Igor Sysoev编写的免费开源Web服务器.自2004年公开发布以来,nginx专注于高性能,高并发性和低内存 ...
- WebGL文字渲染的那些问题
THREE.js开发的应用运行在iphone5下发现有些时候会崩溃,跟了几天发现是因为Sprite太多频繁更新纹理占用显存导致的.通常解决纹理频繁更新问题就要用到one draw all方法,放到纹理 ...
- Android Studio安装、配置、第一个程序的那些坑
最近在上Android课,老师布置了量大题难的作业,然而出师未捷身先死,还没看题目,就被Android Studio的安装和环境配置搞得要死要死的,网上的教程也多也杂,良莠不齐,在经历了5小时通过的搜 ...