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 相关文章推荐
js 函数调用模式小结
Dec 26 Javascript
通过Javascript将数据导出到外部Excel文档的函数代码
Jun 15 Javascript
解决IE6的PNG透明JS插件使用介绍
Apr 17 Javascript
JavaScript中的函数(二)
Dec 23 Javascript
实例分析浏览器中“JavaScript解析器”的工作原理
Dec 12 Javascript
详解基于angular路由的requireJs按需加载js
Jan 20 Javascript
jQuery插件zTree实现获取一级节点数据的方法
Mar 08 Javascript
jquery点赞功能实现代码 点个赞吧!
May 29 jQuery
使用Require.js封装原生js轮播图的实现代码
Jun 15 Javascript
微信小程序获取用户信息的两种方法wx.getUserInfo与open-data实例分析
May 03 Javascript
vue-socket.io接收不到数据问题的解决方法
May 13 Javascript
Antd的Table组件嵌套Table以及选择框联动操作
Oct 24 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
与空气斗智斗勇的经典《Overlord》,传说中的“无稽之谈”
2020/04/09 日漫
php中用文本文件做数据库的实现方法
2008/03/27 PHP
php 使用redis锁限制并发访问类示例
2016/11/02 PHP
PHP对象实例化单例方法
2017/01/19 PHP
PHP实践教程之过滤、验证、转义与密码详解
2017/07/24 PHP
PHP+AJAX 投票器功能
2017/11/11 PHP
tp5(thinkPHP5框架)时间查询操作实例分析
2019/05/29 PHP
php使用redis的有序集合zset实现延迟队列应用示例
2020/02/20 PHP
理解Javascript_13_执行模型详解
2010/10/20 Javascript
DIV菜单层实现代码
2010/11/19 Javascript
JS中attr和prop属性的区别以及优先选择示例介绍
2014/06/30 Javascript
javascript控制台详解
2015/06/25 Javascript
jQuery Ajax 上传文件处理方式介绍(推荐)
2016/06/30 Javascript
详解webpack性能优化——DLL
2017/10/20 Javascript
JS去掉字符串末尾的标点符号及删除最后一个字符的方法
2017/10/24 Javascript
浅谈React高阶组件
2018/03/28 Javascript
vue计算属性及使用详解
2018/04/02 Javascript
node跨域转发 express+http-proxy-middleware的使用
2018/05/31 Javascript
JS获取表格视图所选行号的ids过程解析
2020/02/21 Javascript
[15:46]教你分分钟做大人——沙王
2015/03/11 DOTA
Python使用ffmpy将amr格式的音频转化为mp3格式的例子
2019/08/08 Python
通过实例解析Python return运行原理
2020/03/04 Python
python中安装django模块的方法
2020/03/12 Python
keras之权重初始化方式
2020/05/21 Python
详解tensorflow之过拟合问题实战
2020/11/01 Python
Pycharm-community-2020.2.3 社区版安装教程图文详解
2020/12/08 Python
HTML5 通信API 跨域门槛将不再高、数据推送也不再是梦
2013/04/25 HTML / CSS
农业大学毕业生的个人自我评价
2013/10/11 职场文书
xxx同志考察材料
2014/02/07 职场文书
房屋租赁意向书
2014/04/01 职场文书
房产代理公证处委托书
2014/04/04 职场文书
2016学习医德医风心得体会
2016/01/25 职场文书
2019销售早会主持词
2019/06/27 职场文书
解决Golang time.Parse和time.Format的时区问题
2021/04/29 Golang
如何使用分区处理MySQL的亿级数据优化
2021/06/18 MySQL
MySQL count(*)统计总数问题汇总
2022/09/23 MySQL