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 相关文章推荐
jQuery对象和DOM对象使用说明
Jun 25 Javascript
IE 当eval遇上function的处理
Aug 09 Javascript
javascript中的return和闭包函数浅析
Jun 06 Javascript
JavaScript动态修改弹出窗口大小的方法
Apr 06 Javascript
JS非Alert实现网页右下角“未读信息”效果弹窗
Sep 26 Javascript
原生js实现addClass,removeClass,hasClass方法
Apr 27 Javascript
微信小程序 加载 app-service.js 错误解决方法
Oct 12 Javascript
jQuery操作之效果详解
May 19 jQuery
weebox弹出窗口不居中显示的解决方法
Nov 27 Javascript
Vue实现仿iPhone悬浮球的示例代码
Mar 13 Javascript
vue之封装多个组件调用同一接口的案例
Aug 11 Javascript
微信小程序实现录音Record功能
May 09 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
最贵的咖啡是怎么产生的,它的风味怎么样?
2021/03/04 新手入门
php 信息采集程序代码
2009/03/17 PHP
PHP编程实现计算抽奖概率算法完整实例
2017/08/09 PHP
利用PHPStorm如何开发Laravel应用详解
2017/08/30 PHP
strpos() 函数判断字符串中是否包含某字符串的方法
2019/01/16 PHP
获取HTML DOM节点元素的方法的总结
2009/08/21 Javascript
JS仿flash上传头像效果实现代码
2011/07/18 Javascript
jquery 倒计时效果实现秒杀思路
2013/09/11 Javascript
Bootstrap中的Panel和Table全面解析
2016/06/13 Javascript
JavaScript实现经典排序算法之选择排序
2016/12/28 Javascript
js实现无缝滚动图
2017/02/22 Javascript
angular2 ng build部署后base文件路径问题详细解答
2017/07/15 Javascript
详解vue为什么要求组件模板只能有一个根元素
2019/07/22 Javascript
js+canvas实现两张图片合并成一张图片的方法
2019/11/01 Javascript
vue+echarts实现中国地图流动效果(步骤详解)
2021/01/27 Vue.js
python改变日志(logging)存放位置的示例
2014/03/27 Python
python获取文件后缀名及批量更新目录下文件后缀名的方法
2014/11/11 Python
Python字符串替换实例分析
2015/05/11 Python
Python实现的多叉树寻找最短路径算法示例
2018/07/30 Python
对Python Class之间函数的调用关系详解
2019/01/23 Python
django模板结构优化的方法
2019/02/28 Python
详解python算法之冒泡排序
2019/03/05 Python
Python3.8对可迭代解包的改进及用法详解
2019/10/15 Python
python3 Scrapy爬虫框架ip代理配置的方法
2020/01/17 Python
详解html5 canvas常用api总结(二)--绘图API
2016/12/14 HTML / CSS
马歇尔耳机官网:Marshall Headphones
2020/02/04 全球购物
教师研修随笔感言
2014/01/23 职场文书
电话客服专员岗位职责
2014/06/28 职场文书
党性教育心得体会
2014/09/03 职场文书
关于清明节的演讲稿
2014/09/13 职场文书
庆祝国庆节演讲稿2014
2014/09/19 职场文书
合理化建议书
2015/02/04 职场文书
Python中json.load()和json.loads()有哪些区别
2021/06/07 Python
python中pandas对多列进行分组统计的实现
2021/06/18 Python
5种 JavaScript 方式实现数组扁平化
2021/10/05 Javascript
victoriaMetrics库布隆过滤器初始化及使用详解
2022/04/05 Golang