vue 的 solt 子组件过滤过程解析


Posted in Javascript onSeptember 07, 2019

如下图:

vue 的 solt 子组件过滤过程解析

1、定义了一个类似下拉的组件 mySelect , 然后里面有自定义的组件 myOptions

2、有很多时候,我们希望, mySelect 组件内部的子组件,只能是 myOptions 。 不应该有 <div>666</div>

3、在mySelect 里面做一层过滤,去掉不需要的组件

下面先看看

myOptions.vue 组件代码

<template>
 <div class="options">
   <div>这里是 options</div>
 </div>
</template>
 
<script>
// @ is an alias to /src
export default {
 name: 'myoptions',
 data(){
   return {}
 },
 created(){  
 },
 mounted(){
  }
}
</script>

接下来是 mySelect 的代码:

<template>
 <div class="select">
   <div>这里是 Select</div>
   <slot></slot>
 </div>
</template>
 
<script>
// @ is an alias to /src
 
 
export default {
 name: "myselect",
 data(){
   return {
     _children:[]
   }
 },
 created(){
   console.log(this.$children) // 输出为 []
   console.log(this.$slots.default) //输出为 [VNode, VNode, VNode]
   var arr = this.$slots.default || []
   var res = [];
   for(var i = 0; i < arr.length; i++){
      var item = arr[i];
      if(item.componentOptions && item.componentOptions.tag == "myOptions"){
        res.push(item);
      }
   }
   this._children = res;
   this.$slots.default = res;
 },
 mounted(){
  console.log(this.$slots.default) //[VNode, VNode]
  console.log(this.$children)//因为过滤掉了一个,所以为 [VueComponent, VueComponent]
 }
}
</script>

在 mySelect 的 created 和 mounted 里面,分别查看

this.$slots.default和 this.$children

就会发现内部的子组件渲染,与这个有很大关系,只需要过滤一下 slots 就可以了

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
表单(FORM)的一些实用效果代码
Mar 25 Javascript
jQuery之$(document).ready()使用介绍
Apr 05 Javascript
javascript定义变量时有var和没有var的区别探讨
Jul 21 Javascript
JS实现从表格中动态删除指定行的方法
Mar 31 Javascript
纯CSS3代码实现滑动开关效果
Aug 19 Javascript
js本地图片预览实现代码
Oct 09 Javascript
JS代码实现百度地图 画圆 删除标注
Oct 12 Javascript
微信小程序之仿微信漂流瓶实例
Dec 09 Javascript
Bootstrap和Java分页实例第二篇
Dec 23 Javascript
mint-ui的search组件在键盘显示搜索按钮的实现方法
Oct 27 Javascript
javascript实现文本框标签验证的实例代码
Oct 14 Javascript
Openlayers显示地理位置坐标的方法
Sep 28 Javascript
javascript的惯性运动实现代码实例
Sep 07 #Javascript
vue的滚动条插件实现代码
Sep 07 #Javascript
微信小程序页面滚动到指定位置代码实例
Sep 07 #Javascript
通过vue写一个瀑布流插件代码实例
Sep 07 #Javascript
javascript写一个ajax自动拦截并下载数据代码实例
Sep 07 #Javascript
使用layui日期控件laydate对开始和结束时间进行联动控制的方法
Sep 06 #Javascript
解决layer.open后laydate失效的问题
Sep 06 #Javascript
You might like
smarty模板嵌套之include与fetch性能测试
2010/12/05 PHP
教你在header中隐藏php的版本信息
2016/08/10 PHP
JavaScript中的Screen屏幕对象
2008/01/16 Javascript
jquery中ajax学习笔记一
2011/10/16 Javascript
Javascript面向对象扩展库代码分享
2012/03/27 Javascript
Js中获取frames中的元素示例代码
2013/07/30 Javascript
JS获取月的最后一天与JS得到一个月份最大天数的实例代码
2013/12/16 Javascript
使用JQuery实现智能表单验证功能
2016/03/08 Javascript
jQuery可见性过滤选择器用法示例
2016/09/09 Javascript
javascript匀速动画和缓冲动画详解
2016/10/20 Javascript
BootStrap Validator对于隐藏域验证和程序赋值即时验证的问题浅析
2016/12/01 Javascript
canvas 弹幕效果(实例分享)
2017/01/11 Javascript
用nodejs搭建websocket服务器
2017/01/23 NodeJs
AngularJS获取json数据的方法详解
2017/05/27 Javascript
基于Bootstrap分页的实例讲解(必看篇)
2017/07/04 Javascript
mpvue将vue项目转换为小程序
2018/09/30 Javascript
layui点击左侧导航栏,实现不刷新整个页面,只刷新局部的方法
2019/09/25 Javascript
如何利用JavaScript编写更好的条件语句详解
2020/08/10 Javascript
js实现滚动条自动滚动
2020/12/13 Javascript
Python字符串的encode与decode研究心得乱码问题解决方法
2009/03/23 Python
Python break语句详解
2014/03/11 Python
Python中尝试多线程编程的一个简明例子
2015/04/07 Python
python+opencv+caffe+摄像头做目标检测的实例代码
2018/08/03 Python
Opencv-Python图像透视变换cv2.warpPerspective的示例
2019/04/11 Python
Python目录和文件处理总结详解
2019/09/02 Python
Python字符串中删除特定字符的方法
2020/01/15 Python
Python3.9.1中使用split()的处理方法(推荐)
2021/02/07 Python
欧舒丹澳洲版:L’OCCITANE
2017/07/17 全球购物
世界汽车零件:World Car Parts
2019/09/04 全球购物
描述RIP和OSPF区别以及特点
2015/01/17 面试题
临床医学专业学生的自我评价分享
2013/11/21 职场文书
冰淇淋店创业计划书范文
2013/12/27 职场文书
优秀班集体申报材料
2014/12/25 职场文书
北京英文导游词
2015/02/12 职场文书
七年级作文之我的梦想
2019/10/16 职场文书
python前后端自定义分页器
2022/04/13 Python