zoukankan      html  css  js  c++  java
  • 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 就可以了

  • 相关阅读:
    [转]为Ubuntu Server安装gnome图形桌面环境
    [转]ubuntu 安装五笔输入法
    [转]更改文件所有者
    QT 透明设置
    ubuntu 交叉编译arm linux 内核
    Opencv vs 2005编译
    [转]在skyeye中运行uboot
    object的引用 与 foreach的使用
    音频和视频
    HTML5 Canvas API
  • 原文地址:https://www.cnblogs.com/muamaker/p/11014900.html
Copyright © 2011-2022 走看看