使用Vue的插槽插槽分发父组件内容实现高度复用,更加灵活的组件(推荐)

  

  

之前写过一篇关于vue实现对话框会话框组件的文章https://www.jb51.net/article/139218.htm

  

,讲到了如何实现一个vue对话框组件,其中涉及到了父组件和子组件的通信,这个不用多说,看我之前的文章就能明白,文章最后也说到了,我们可以使用槽插槽来编写组件,槽用来分发内容到子组件中,从而实现组件的高度复用,编写的组件更加灵活。

  

还是结合对话框的例子,使用槽来实现对话框组件

  

注册一个名叫dialog-tip的全局组件

        Vue.component (dialog-tip, {   模板:“# dialog-tip”,   道具:“dialogShow”、“消息”,   数据:函数(){   返回{   内容:“   }   },   方法:{   }   });      

使用模板标签来定义这个组件

        & lt;模板id=癲ialog-tip”比;   & lt; div类=v=癲ialogShow”比“dialog_tip”;   & lt; div class=" dialog_tip——面具”在& lt;/div>   & lt; div类=癲ialog_tip——内容”比;   & lt; div类=癲ialog_tip——content__txt”比;   & lt;槽的名字=拔毒弊4乔胧淙? - 8000之间任意整数& lt;/slot>   & lt;/div>   & lt; div类=癲ialog_tip——content__btns”比;   & lt; slot>   & lt;按钮类=" btn "祝辞确定& lt;/button>   & lt;按钮类=" btn "祝辞重新输入& lt;/button>   & lt;按钮类=" btn "祝辞去注册& lt;/button>   & lt;/slot>   & lt;/div>   & lt;/div>   & lt;/div>   & lt;/template>      & lt;模板id=癲ialog-tip”比;   & lt; div类=v=癲ialogShow”比“dialog_tip”;   & lt; div class=" dialog_tip——面具”在& lt;/div>   & lt; div类=癲ialog_tip——内容”比;   & lt; div类=癲ialog_tip——content__txt”比;   & lt;槽的名字=拔毒弊4乔胧淙? - 8000之间任意整数& lt;/slot>   & lt;/div>   & lt; div类=癲ialog_tip——content__btns”比;   & lt; slot>   & lt;按钮类=" btn "祝辞确定& lt;/button>   & lt;按钮类=" btn "祝辞重新输入& lt;/button>   & lt;按钮类=" btn "祝辞去注册& lt;/button>   & lt;/slot>   & lt;/div>   & lt;/div>   & lt;/div>   & lt;/template>      

组件内容包括两部分,一个是提示内容,一个是按钮按钮,我们将要修改替换的内容使用槽包含起来,
  ,这样父组件就可以分发内容到子组件里面了。

        & lt; div类=癲ialog_tip——content__txt”比;   & lt;槽的名字=拔毒弊4乔胧淙? - 8000之间任意整数& lt;/slot>   & lt;/div>   & lt; div类=癲ialog_tip——content__btns”比;   & lt; slot>   & lt;按钮类=" btn "祝辞确定& lt;/button>   & lt;按钮类=" btn "祝辞重新输入& lt;/button>   & lt;按钮类=" btn "祝辞去注册& lt;/button>   & lt;/slot>   & lt;/div>      

除了默认插槽,还可以定义具名插槽,如果组件中有好几个部分内容需要替换,我们可以为它定义一个名称,例如:
  

  

<代码> & lt;槽name=拔毒弊4乔胧淙? - 8000之间任意整数& lt;/slot>

  

这样在使用组件的时候,指定槽的名字,就会将这一部分内容替换掉,而不会替换其他的插槽内容
  

  

<代码> & lt; p槽=拔毒弊4乔胧淙胝肥只? lt;/p>

  

使用定义好的对话框组件

     =& lt; dialog-tip消息“hello”: dialog-show=癲ialogShow.tip3”比;   & lt; p槽=拔毒弊4乔胧淙胝肥只? lt;/p>   & lt;按钮类=癰tn @click”=癱loseDialogTip(一句话)“祝辞确定& lt;/button>   & lt;/dialog-tip>=& lt; dialog-tip消息“hello”: dialog-show=癲ialogShow.tip4”比;   & lt; p槽=拔毒弊4潜?没有此用户,请核实后输入& lt;/p>   & lt;按钮类=癰tn @click”=癱loseDialogTip (tip4)”在重新输入& lt;/button>   & lt;按钮类=癰tn @click”=白⒉帷钡脑谌プ⒉? lt;/button>   & lt;/dialog-tip>      

如果不指定槽的名称,默认dialog-tip标签里面的内容会替换子组件中使用槽包含的内容部分,例如以上

  

使用槽指定了它的名称来替换子组件中的对应的槽部分,而没有使用槽指定名称的内容会默认将子组件中
  ,没有定义具名插槽的部分内容替换掉。

  

需要注意的是,如果dialog-tip标签里没有定义需要分发的内容,那么子组件中会显示默认的插槽内容

  

关于更多的槽用法,请移步https://cn.vuejs.org/v2/guide/components-slots.html

使用Vue的插槽插槽分发父组件内容实现高度复用,更加灵活的组件(推荐)