当前位置:   article > 正文

vue slot 仔细研究一下

vue slot 仔细研究一下

核心内容:

v-solt  ,  v-bind  ,  $slots  ,  $scopedSlots  ,  $attrs  ,  $listeners

一,基础用法。

  1. //子组件
  2. <div>
  3. <slot></slot>
  4. </div>
  5. ......
  6. //父组件
  7. <div>
  8. <children>
  9. <h1>hello wolrld</h1>
  10. </children>
  11. </div>
  12. //hello world 将会放到子组件中进行渲染

 二,名命插槽+传值

  1. //子组件
  2. <div>
  3. <slot name="one" :random='slotParam'></slot>
  4. <slot name="two" v-bind='slotParam'></slot>
  5. <slot v-bind='slotParam'></slot>
  6. </div>
  7. <script>
  8. export default {
  9. data() {
  10. return {
  11. slotParam:{name:'米老鼠'}
  12. };
  13. },
  14. };
  15. </script>
  16. //slot 不写name默认name='default'
  17. ......
  18. //父组件
  19. // "#" 是v-slot:的语法糖
  20. <div>
  21. <children>
  22. <template #one={random:{name}}> ---{{name}}---</template>
  23. <template #two={name}> ---{{name}}---</template>
  24. <div #default={name}>{{name}}</div>
  25. //default也可以这样写
  26. <div v-slot={name}>{{name}}</div>
  27. </children>
  28. </div>
  29. //name都将渲染为‘米老鼠’

三,扩展

  1. 1,$slot,$scopedSlots.
  2. //$slot :非作用域插槽集合。
  3. //$scopedSlots:作用域插槽集合。
  4. //子组件
  5. <div>
  6. <p v-for='(item,index) in Object.keys($scopedSlots)'>
  7. <slot :name="key" v-bind="scope"></slot>
  8. </p>
  9. </div>
  10. <script>
  11. export default {
  12. data() {
  13. return {
  14. slotParam:{name:'米老鼠'}
  15. }
  16. },
  17. mounted(){ console.log(this.$slot,this.$scopedSlot)}
  18. //$slot:下例调用使用了#one,#default,打印如下。
  19. //{two:obj}
  20. //$scopedSlot !!!(scopedSlot的信息===父组件的使用数量)
  21. //{one:fun,two:fun,default:fun}
  22. };
  23. </script>
  24. //父组件 -------------------------------------------------
  25. <div>
  26. <finner>
  27. <template #one="{ name}"> {{ one }} </template>
  28. <template #two> two </template>
  29. <template #three="{ name}">{{ name }} </template>
  30. </finner>
  31. </div>
  1. 2,$attrs,$listeners.
  2. //$attrs:包含了父作用域中, attribute 绑定 (class 和 style 除外)的值,
  3. //且props接收中的值,也不包含其中。(通过 v-bind="$attrs" 传入内部组件)。
  4. //$listeners:父作用域中的事件监听器,通过 v-on="$listeners" 传入内部组件。
  5. //父组件
  6. <div>
  7. <Componenst :aaa="aaa" :bbb="bbb" @handOne="handOne" @handTwo="handTwo" />
  8. </div>
  9. ...
  10. data(){
  11. return {
  12. aaa:111,
  13. bbb:222
  14. }
  15. },
  16. method:{
  17. handOne(){},
  18. handTwo(){console.log('触发了')}
  19. }
  20. ...
  21. //子组件
  22. <div>
  23. <componenst-child v-bind="$attrs" v-on="$listeners"/>
  24. </div>
  25. ...
  26. props{
  27. aaa:'这里props接收了'
  28. },
  29. ...
  30. //子组件
  31. <div>
  32. <componenst-sun @click='$listeners.handOne'/>
  33. </div>
  34. ...
  35. mounted(){
  36. console.log(this.$attrs,this.$listeners)
  37. //{bbb:222} (因子组件props内有aaa,所以aaa被$attrs剔除)
  38. //{handOne(){},handTwo(){}}
  39. },
  40. ...

以上内容仔细研究一下,slot插槽是非常重要的核心内容,多用多练即可。 

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/230790?site
推荐阅读