最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Pass variables through <slot> to parent component - Stack Overflow

programmeradmin3浏览0评论

Child ponent:

Vueponent('v-data', {

  template: `
    <div class="v-data">
      <slot :visible-data="visibleData"></slot>
    </div>
  `,    

  puted: {

    visibleData(){
      return [1,2,3];
    },

  },

});

In parent ponent I am using it like this:

<v-data>
   <li v-for="x in visibleData">{{x}}</li>
</v-data>

but visibleData is not passed in the template. I should be able to get 1,2,3.

Is there a way to pass variables between ponents like this?

Child ponent:

Vue.ponent('v-data', {

  template: `
    <div class="v-data">
      <slot :visible-data="visibleData"></slot>
    </div>
  `,    

  puted: {

    visibleData(){
      return [1,2,3];
    },

  },

});

In parent ponent I am using it like this:

<v-data>
   <li v-for="x in visibleData">{{x}}</li>
</v-data>

but visibleData is not passed in the template. I should be able to get 1,2,3.

Is there a way to pass variables between ponents like this?

Share Improve this question asked Apr 6, 2020 at 18:04 AlexAlex 66.1k185 gold badges459 silver badges651 bronze badges 1
  • In Vue data gets passed down not up. You might be able to create a puted property on your parent that just returns the property from the child. This probably won't work but it's worth a shot. – Adam H Commented Apr 6, 2020 at 18:22
Add a ment  | 

2 Answers 2

Reset to default 4

You are definitely looking for Scoped Slots. With this, one can easily pass data from the child ponent to the parent such that data could be referred to in the template being passed on to the child ponent. You can use it to pass data from your child ponent as

<div class="v-data">
    <slot :visible-data="visibleData"></slot>
</div>

Which can be referred in the parent as

<v-data>
  <template #default="{visibleData}">
    <li v-for="(value, index) in visibleData" :key="index">{{value}}</li>
  </template>
</v-data>

Few things to note here

  1. The properties can be referred to using the name of the slot. Here we are referring to the default slot thus using the keyword default.

  2. We can use Object Destructuring to directly access the property passed to the parent ponent

Sanbox present HERE

What you need is Scoped Slots So that parent can see the child's data.

<v-data>
   <template v-slot:default="slotProps">
      <li v-for="x in slotProps.visibleData">{{x}}</li>
   </template>

</v-data>

I might have made some mistake here, but I'd remend reading it here: Official Docs

发布评论

评论列表(0)

  1. 暂无评论