美文网首页
Vue包装第三方组件

Vue包装第三方组件

作者: seaasun | 来源:发表于2019-04-15 17:58 被阅读0次

    有个第三方组件Third-Component, 你想包装再利用,可以如下写:

    <Third-Component v-bind="$attrs" v-on="$listeners">
        <template v-for="(_, slot) of $scopedSlots" v-slot:[slot]="scope">
          <slot :name="slot" v-bind="scope"/>
        </template>
        <slot/>
    </Third-Component>
    

    例子

    比如你常用UI组件库中的弹框组件Modal,每次调用时需将其width设为1000:

    <Modal width="1000">
     // ...
    </Modal
    

    你不想每次调用都写width="1000" ,因为可能以后需改为width=800,你希望width="1000" 只出现一次。
    你可以创建一个新组件my-modal,组件内容如下:

    <template>
      <Modal 
             v-bind="$attrs"  
             v-on="$listeners"
             :width="1000">
        <template v-for="(_, slot) of $scopedSlots" v-slot:[slot]="scope">
          <slot :name="slot" v-bind="scope"/>
        </template>
        <slot/>
      </Modal>
    </template>
    
    <script>
      export default {
        name: "myModal",
      }
    </script>
    

    以后你只需调用<my-modal>即可。在My-Modal中可以用Modal的全部props,事件监听和slot。

    分析

    v-bind="$attrs" 
    

    传递所有的prop

    v-on="$listeners"
    

    传递所有的监听

    <template v-for="(_, slot) of $scopedSlots" v-slot:[slot]="scope">
          <slot :name="slot" v-bind="scope"/>
    </template>
    

    遍历并写入所有的slot插槽

    相关文章

      网友评论

          本文标题:Vue包装第三方组件

          本文链接:https://www.haomeiwen.com/subject/terpwqtx.html