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 相关文章推荐
Javascript实例教程(19) 使用HoTMetal(5)
Dec 23 Javascript
JQuery跨Iframe选择实现代码
Aug 19 Javascript
怎么判断js脚本加载完成
Feb 28 Javascript
JQuery实现动态适时改变字体颜色的方法
Mar 10 Javascript
JavaScript通过元素索引号删除数组中对应元素的方法
Mar 18 Javascript
jQuery 1.9.1源码分析系列(十四)之常用jQuery工具
Dec 02 Javascript
Atitit.js的键盘按键事件捆绑and事件调度
Apr 01 Javascript
自己封装的一个原生JS拖动方法(推荐)
Nov 22 Javascript
JavaScript数据类型和变量_动力节点Java学院整理
Jun 26 Javascript
vue基础之使用get、post、jsonp实现交互功能示例
Mar 12 Javascript
jquery实现上传文件进度条
Mar 26 jQuery
国庆节到了,利用JS实现一个生成国庆风头像的小工具 详解实现过程
Oct 05 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
用PHP 快速生成 Flash 动画的方法
2007/03/06 PHP
php实现mysql数据库操作类分享
2014/02/14 PHP
php使用curl并发减少后端访问时间的方法分析
2016/05/12 PHP
php获取flash尺寸详细数据的方法
2016/11/12 PHP
PHP7使用ODBC连接SQL Server2008 R2数据库示例【基于thinkPHP5.1框架】
2019/05/06 PHP
jQuery autocomplete插件修改
2009/04/17 Javascript
javascript 数据类型转换(parseInt,parseFloat)
2010/07/20 Javascript
jquery $.ajax相关用法分享
2012/03/16 Javascript
解决IE6的PNG透明JS插件使用介绍
2013/04/17 Javascript
Javascript验证用户输入URL地址是否为空及格式是否正确
2014/10/09 Javascript
JQuery表单验证插件EasyValidator用法分析
2014/11/15 Javascript
JavaScript插件化开发教程 (一)
2015/01/27 Javascript
后台获取ZTREE选中节点的方法
2015/02/12 Javascript
jQuery实现360°全景拖动展示
2015/03/18 Javascript
JS实现横向拉伸动感伸缩菜单效果代码
2015/09/04 Javascript
在线引用最新jquery文件的实现方法
2016/08/26 Javascript
jQuery实现的瀑布流加载效果示例
2016/09/13 Javascript
详解Python中logging日志模块在多进程环境下的使用
2016/12/26 Javascript
Three.js基础部分学习
2017/01/08 Javascript
js代码规范之Eslint安装与配置详解
2018/09/08 Javascript
jQuery cookie的公共方法封装和使用示例
2020/06/01 jQuery
[02:33]DOTA2英雄基础教程 司夜刺客
2013/12/04 DOTA
[02:52]DOTA2新手基础教程 米波
2014/01/21 DOTA
Python的SimpleHTTPServer模块用处及使用方法简介
2018/01/22 Python
Python协程操作之gevent(yield阻塞,greenlet),协程实现多任务(有规律的交替协作执行)用法详解
2019/10/14 Python
numpy中三维数组中加入元素后的位置详解
2019/11/28 Python
浅谈matplotlib.pyplot与axes的关系
2020/03/06 Python
pandas使用函数批量处理数据(map、apply、applymap)
2020/11/27 Python
CSS3媒体查询Media Queries基础学习教程
2016/02/29 HTML / CSS
GafasWorld哥伦比亚:网上购买眼镜
2017/11/28 全球购物
北美最大的参茸药食商城:德成行
2020/12/06 全球购物
介绍一下Prototype的$()函数,$F()函数,$A()函数都是什么作用?
2014/03/05 面试题
产品发布会策划方案
2014/05/12 职场文书
2019职场单身人才调研报告:互联网行业单身比例最高
2019/08/07 职场文书
使用pycharm运行flask应用程序的详细教程
2021/06/07 Python
Win11控制面板快捷键是什么?Win11打开控制面板的方法汇总
2022/07/07 数码科技