使用Vue的slot插槽分发父组件内容实现高度复用、更加灵活的组件(推荐)


Posted in Javascript onMay 01, 2018

写在前面

之前写过一篇关于vue实现dialog会话框组件的文章https://3water.com/article/139218.htm

 讲到了如何实现一个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>

<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

最后

效果图

使用Vue的slot插槽分发父组件内容实现高度复用、更加灵活的组件(推荐)

总结

以上所述是小编给大家介绍的使用Vue的slot插槽分发父组件内容实现高度复用、更加灵活的组件,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

Javascript 相关文章推荐
类似CSDN图片切换效果脚本
Sep 17 Javascript
基于jQuery捕获超链接事件进行局部刷新代码
May 10 Javascript
JS Pro-深入面向对象的程序设计之继承的详解
May 07 Javascript
动态加载脚本提升javascript性能
Feb 24 Javascript
用javascript关闭本窗口不弹出询问框的方法
Sep 12 Javascript
深入理解JavaScript系列(25):设计模式之单例模式详解
Mar 03 Javascript
jquery append 动态添加的元素事件on 不起作用的解决方案
Jul 30 Javascript
jQuery UI仿淘宝搜索下拉列表功能
Jan 10 Javascript
Node.js创建HTTP文件服务器的使用示例
May 11 Javascript
vue实现拖拽的简单案例 不超出可视区域
Jul 25 Javascript
Vue调用后端java接口的实例代码
Oct 28 Javascript
js正则匹配多个全部数据问题
Dec 20 Javascript
不使用JavaScript实现菜单的打开和关闭效果demo
May 01 #Javascript
如何获取TypeScript的声明文件.d.ts
May 01 #Javascript
Vue项目中使用Vux的安装过程
May 01 #Javascript
在Vue项目中使用d3.js的实例代码
May 01 #Javascript
详解ajax的data参数错误导致页面崩溃
Apr 30 #Javascript
妙用缓存调用链实现JS方法的重载
Apr 30 #Javascript
JS实现的缓冲运动效果示例
Apr 30 #Javascript
You might like
聊天室php&amp;mysql(一)
2006/10/09 PHP
php基础知识:类与对象(2) 自动加载对象
2006/12/13 PHP
服务器web工具 php环境下
2010/12/29 PHP
php 按指定元素值去除数组元素的实现方法
2011/11/04 PHP
批量去除PHP文件中bom的PHP代码
2012/03/13 PHP
thinkPHP利用ajax异步上传图片并显示、删除的示例
2018/09/26 PHP
YII框架学习笔记之命名空间、操作响应与视图操作示例
2019/04/30 PHP
js活用事件触发对象动作
2008/08/10 Javascript
jquery validation插件表单验证的一个例子
2010/03/03 Javascript
各浏览器对link标签onload/onreadystatechange事件支持的差异分析
2011/04/27 Javascript
读jQuery之一(对象的组成)
2011/06/11 Javascript
javascript小组件 原生table排序表格脚本(兼容ie firefox opera chrome)
2012/07/25 Javascript
浅析JS原型继承与类的继承
2016/04/07 Javascript
jquery 中toggle的2种用法详解(推荐)
2016/09/02 Javascript
微信小程序 自己制作小组件实例详解
2016/12/22 Javascript
微信小程序拍照和摄像功能实现方法示例
2019/02/01 Javascript
jquery.tagsinput.js实现记录checkbox勾选的顺序
2019/09/21 jQuery
Vertx基于EventBus发送接受自定义对象
2020/11/16 Javascript
[02:22]完美世界DOTA2联赛PWL S3 集锦第一期
2020/12/15 DOTA
python 测试实现方法
2008/12/24 Python
Python发送Email方法实例
2014/08/21 Python
对python中数组的del,remove,pop区别详解
2018/11/07 Python
python之语音识别speech模块
2020/09/09 Python
家得宝加拿大家装网上商店:The Home Depot加拿大
2016/08/27 全球购物
英国最大的独立摄影零售商:Park Cameras
2019/11/27 全球购物
乌克兰移动电子产品和相关配件的在线商店:iTMag
2020/03/16 全球购物
Ibatis如何使用动态表名
2015/07/12 面试题
六查六看剖析材料
2014/02/15 职场文书
运动会入场式解说词
2014/02/18 职场文书
群众路线教育党课主持词
2014/04/01 职场文书
营销部内勤岗位职责
2014/04/30 职场文书
大三学生学年自我鉴定
2014/09/12 职场文书
加强干部作风建设整改方案
2014/10/24 职场文书
校长个人总结
2015/03/03 职场文书
中秋节随笔
2015/08/15 职场文书
师德师风心得体会(2016精选篇)
2016/01/12 职场文书