将父母的道具传递给Vue,js中的广告位

时间:2019-10-01 15:18:13

标签: vue.js vuejs2 vue-component

我的应用程序中有一个DocumenContainer组件,其中有多个ChartContainer组件。 ChartContainer有一个插槽,我可以在其中放置各种类型的图表(条形图,折线图等)。我想将数据isOuput传递到作为插槽的子组件

ChartContainer (简体):

<template>
    <div class="card-body">
        <slot v-slot="isOutput"></slot>
     </div>
</template>
<script>
    export default {
        data() { 
            return {
                isOutput : false,
            }
        }
</script>

DocumentContainer

<chart-container title="Stats Model" v-slot="slotProps" :documentId="id">
  {{slotProps.isOuput}}
  <v-bar-chart  :docId="id"></v-bar-chart>
</chart-container>

我尝试使用isOutputv-slot传递给父级(DocumentContainer)。现在的问题是我只能打印{{slotProps.isOutput}}。我想将slotProps.isOutput作为<v-bar-chart>

的道具
 <v-bar-chart :isOuput="slotProps.isOutput" :docId="id"></v-bar-chart>

在条形图道具中给了我未定义的含义。 是否有比将数据传递给父母和孩子更简单的方法?我该如何实现?

1 个答案:

答案 0 :(得分:0)

我认为这与context

有关

如果您改用v-bind,它将起作用

<v-bar-chart v-bind="{ isOutput: slotProps.isOutput, docId: id }"></v-bar-chart>

示例代码

const Component1 = {
  template: `
  <div>
    <h2>Component 1</h2>
    <button @click="isOutput = !isOutput">Toggle</button>
    <slot :isOutput="isOutput"></slot>
  </div>
  `,
  data() {
    return {
      isOutput: false,
    }
  }
};

const Component2 = {
  props: ['isOutput'],
  template: `
  <div>
    <h2>Component 2</h2>
    isOutput: {{String(isOutput)}}
  </div>
  `
};

new Vue({
  el: '#app',
  components: {
    Component1,
    Component2
  }
});
<script src="https://unpkg.com/vue@2.6.10/dist/vue.min.js"></script>
<div id="app">
  <h1>Home</h1>
  <Component1>
    <template v-slot="slotProps">
        isOutput: {{String(slotProps.isOutput)}}
        <Component2 v-bind="{ isOutput: slotProps.isOutput }">
        </Component2>
    </template>
  </Component1>
</div>