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中获取请求的URL参数[正则]
Dec 25 Javascript
利用了jquery的ajax实现二级联互动菜单
Dec 02 Javascript
JS实现的简洁纵向滑动菜单(滑动门)效果
Oct 19 Javascript
学习javascript文件加载优化
Feb 19 Javascript
JS与Ajax Get和Post在使用上的区别实例详解
Jun 08 Javascript
JavaScript中的splice方法用法详解
Jul 20 Javascript
浅谈在Vue-cli里基于axios封装复用请求
Nov 06 Javascript
Js中将Long转换成日期格式的实现方法
Jun 05 Javascript
关于在vue 中使用百度ueEditor编辑器的方法实例代码
Sep 14 Javascript
vue项目搭建以及全家桶的使用详细教程(小结)
Dec 19 Javascript
浅谈Angular单元测试总结
Mar 22 Javascript
vue 添加和编辑用同一个表单,el-form表单提交后清空表单数据操作
Aug 03 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 一元分词算法
2009/11/30 PHP
ionCube 一款类似zend的PHP加密/解密工具
2010/07/25 PHP
一个基于PDO的数据库操作类
2011/03/24 PHP
PHP获取服务器端信息的方法
2014/11/28 PHP
PHP中imagick函数的中文解释
2015/01/21 PHP
PHP的Laravel框架中使用消息队列queue及异步队列的方法
2016/03/21 PHP
php接口隔离原则实例分析
2019/11/11 PHP
javascript 屏蔽鼠标键盘的几段代码
2008/01/02 Javascript
鼠标划过实现延迟加载并隐藏层的js代码
2013/10/11 Javascript
解析javascript中鼠标滚轮事件
2015/05/26 Javascript
浅谈JavaScript中运算符的优先级
2015/07/07 Javascript
JS实现用户注册时获取短信验证码和倒计时功能
2016/10/27 Javascript
jQuery源码分析之init的详细介绍
2017/02/13 Javascript
js实现文字跑马灯效果
2017/02/23 Javascript
Node.js数据库操作之连接MySQL数据库(一)
2017/03/04 Javascript
关于foreach循环中遇到的问题小结
2017/05/08 Javascript
实例分析JS与Node.js中的事件循环
2017/12/12 Javascript
vue树形结构获取键值的方法示例
2018/06/21 Javascript
JSON是什么?有哪些优点?JSON和XML的区别?
2019/04/29 Javascript
Vue项目页面跳转时浏览器窗口上方显示进度条功能
2020/03/26 Javascript
vue-router 2.0 跳转之router.push()用法说明
2020/08/12 Javascript
nodejs中使用worker_threads来创建新的线程的方法
2021/01/22 NodeJs
Python Tkinter基础控件用法
2014/09/03 Python
python中异常捕获方法详解
2017/03/03 Python
Python列表与元组的异同详解
2019/07/02 Python
html5 制作地图当前定位箭头的方法示例
2020/01/10 HTML / CSS
番木瓜健康和保健产品第一大制造商:Herbal Papaya
2017/04/25 全球购物
英国领先的杂志订阅网站:Magazine.co.uk
2018/01/25 全球购物
巴西最大的运动品牌:Olympikus
2020/07/14 全球购物
口头翻译求职人自荐信
2013/12/07 职场文书
公务员转正考察材料
2014/02/07 职场文书
融资租赁计划书
2014/04/29 职场文书
办公室文员工作自我鉴定
2014/09/19 职场文书
2019大学生社会实践报告汇总
2019/08/16 职场文书
简单聊聊Vue中的计算属性和属性侦听
2021/10/05 Vue.js