How to pass props using slots from parent to child -vuejs

前端 未结 1 1511
刺人心
刺人心 2020-12-09 10:02

I have a parent component and a child component.

The parent component\'s template uses a slot so that one or more child components can be contained inside the parent

相关标签:
1条回答
  • 2020-12-09 10:36

    You need to use a scoped slot. You were almost there, I just added the template that creates the scope.

      <my-parent>
        <template slot-scope="{signal}">
          <my-child :signal="signal"></my-child>
          <my-child :signal="signal"></my-child>
        </template>
      </my-parent>
    

    Here is your code updated.

    const MyParent = Vue.component('my-parent', {
      template: `<div>
                   <h3>Parent's Children:</h3>
                   <slot :signal="parentVal"></slot>
                 </div>`,
    
      data: function() {
        return {
          parentVal: 'value of parent'
        }
      }
    });
    
    
    const MyChild = Vue.component('my-child', {
      template: '<h3>Showing child {{signal}}</h3>',
      props: ['signal']
    });
    
    new Vue({
      el: '#app',
      components: {
        MyParent,
        MyChild
      }
    })
    <script src="https://unpkg.com/vue/dist/vue.js"></script>
    
    <div id="app">
      <my-parent>
        <template slot-scope="{signal}">
          <my-child :signal="signal"></my-child>
          <my-child :signal="signal"></my-child>
        </template>
      </my-parent>
    </div>


    The release of Vue 2.6 introduces a unified v-slot directive which can be used for normal or scoped slots. In this case, since you're using the default, unnamed slot, the signal property can be accessed via v-slot="{ signal }":

      <my-parent>
        <template v-slot="{ signal }">
          <my-child :signal="signal"></my-child>
          <my-child :signal="signal"></my-child>
        </template>
      </my-parent>
    
    0 讨论(0)
提交回复
热议问题