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实现自定义对话框的代码
Jun 15 Javascript
经典海量jQuery插件 大家可以收藏一下
Feb 07 Javascript
JavaScript CSS修改学习第六章 拖拽
Feb 19 Javascript
jQuery教程 $()包装函数来实现数组元素分页效果
Aug 13 Javascript
JavaScript设置、获取、清除单值和多值cookie的方法
Nov 17 Javascript
JS实现单击输入框弹出选择框效果完整实例
Dec 14 Javascript
BootStrap智能表单实战系列(四)表单布局介绍
Jun 13 Javascript
Node.js配合node-http-proxy解决本地开发ajax跨域问题
Aug 31 Javascript
JS库particles.js创建超炫背景粒子插件(附源码下载)
Sep 13 Javascript
解决vue build打包之后首页白屏的问题
Mar 06 Javascript
JavaScript常见事件处理程序实例总结
Jan 05 Javascript
vue渲染方式render和template的区别
Jun 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+MYSQL的文章管理系统(一)
2006/10/09 PHP
php Try Catch异常测试
2009/03/01 PHP
php连接函数implode与分割explode的深入解析
2013/06/26 PHP
php使用curl存储cookie的示例
2014/03/31 PHP
PHP中addslashes与mysql_escape_string的区别分析
2016/04/25 PHP
索趣科技的答案
2007/02/07 Javascript
fancybox1.3.1 基于Jquery的插件在IE中图片显示问题
2010/10/01 Javascript
js判断字符长度及中英文数字等
2014/03/19 Javascript
javascript实现网页屏蔽Backspace事件,输入框不屏蔽
2015/07/21 Javascript
Javascript 调用 ActionScript 的简单方法
2016/09/22 Javascript
详解nodeJS中读写文件方法的区别
2017/03/06 NodeJs
easyui关于validatebox实现多重规则验证的方法(必看)
2017/04/12 Javascript
vue.js中父组件调用子组件的内部方法示例
2017/10/22 Javascript
JS实现的input选择图片本地预览功能示例
2018/08/29 Javascript
Electron + vue 打包桌面操作流程详解
2019/06/24 Javascript
原生js实现无缝轮播图
2020/01/11 Javascript
vue实践---vue不依赖外部资源实现简单多语操作
2020/09/21 Javascript
解决vue项目axios每次请求session不一致的问题
2020/10/24 Javascript
Python实现分割文件及合并文件的方法
2015/07/10 Python
Python判断文本中消息重复次数的方法
2016/04/27 Python
Python3操作SQL Server数据库(实例讲解)
2017/10/21 Python
python机器学习理论与实战(二)决策树
2018/01/19 Python
python 图像平移和旋转的实例
2019/01/10 Python
Python通过TensorFlow卷积神经网络实现猫狗识别
2019/03/14 Python
python使用pymongo与MongoDB基本交互操作示例
2020/04/09 Python
解决python 执行sql语句时所传参数含有单引号的问题
2020/06/06 Python
python 通过pip freeze、dowload打离线包及自动安装的过程详解(适用于保密的离线环境
2020/12/14 Python
全球性的在线购物网站:Zapals
2017/03/22 全球购物
建筑设计专业求职自我评价
2014/03/02 职场文书
保护地球的标语
2014/06/17 职场文书
银行授权委托书样本
2014/10/13 职场文书
2016教师党员学习心得体会
2016/01/21 职场文书
朋友圈早安励志语录!
2019/07/08 职场文书
MySQL之DML语言
2021/04/05 MySQL
动画《新网球王子 U-17 WORLD CUP》希腊队PV公开
2022/04/02 日漫
Nginx利用Logrotate实现日志分割
2022/05/20 Servers