【问题标题】:Vue.js/Nuxt.js - How to pass props to slots?Vue.js/Nuxt.js - 如何将道具传递给插槽?
【发布时间】:2020-02-06 04:06:15
【问题描述】:

所以我有一个包含以下代码的祖父组件:

<template>
  <div>
      <Question qtype="single" qroot="1">
        <Answer qpoints="5" aid="1" qcorrect>Option 1</Answer>
        <Answer qpoints="0" aid="2">Option 2</Answer>
      </Question>
  </div>
</template>
<style>
</style>
<script>
import Question from "~/components/render/Question";
import Answer from "~/components/render/Answer";
export default {
  components: {
    Question,
    Answer
  }
};
</script>

父组件:

<template>
  <div>
        <slot v-bind="$props"></slot>
  </div>
</template>
<style>
</style>
<script>
export default {
  props: ['qtype','qroot']
};
</script>

孩子:

<template>
  <div>
    {{$props}}
    <li style="clear: left;">
      <input v-if="qtype == 'single'" :id="'qid-'+qid" type="radio" :name="qroot" :value="qid" style="float:left" />
      <input v-if="qtype == 'multiple'" :id="'qid-'+qid" type="checkbox" :name="qroot" :value="qid" style="float:left" />
      <label style="float:left;margin-left:5px" :for="'qid-'+qid">
        <slot></slot>
      </label>
    </li>
  </div>
</template>
<style>
</style>
<script>
export default {
   props: ["qtype", "qpoints", "qcorrect", "qroot", "aid"]
};
</script>

我尝试使用 v-bind,像这样 ':qtype="qtype"' 的常规 prop 传递,但它似乎不起作用。 如何将“qtype”和“qroot”道具传递给孙子组件?

【问题讨论】:

    标签: javascript vuejs2 nuxt.js


    【解决方案1】:

    您可以使用Scoped Slots 实现您想要的。

    首先,我们需要正确命名Question.vue 中的道具绑定。我们暂时称它为slotProps

    <!-- Question.vue -->
    <slot :slotProps="$props"></slot>
    

    现在让我们在主文件中完成所有魔法。
    现在还记得我提到过 Scoped Slots 吗?使用他们的 API,我们可以做到这一点。我认为代码不言自明。

    <!-- main file -->
    <Question qtype="single" qroot="1" v-slot="{ slotProps }">
      <Answer :qtype="slotProps.qtype" :qroot="slotProps.qroot" qpoints="5" aid="1" qcorrect>Option 1</Answer>
      <Answer :qtype="slotProps.qtype" :qroot="slotProps.qoot" qpoints="0" aid="2">Option 2</Answer>
    </Question>
    

    免责声明:这仅适用于Vue 2.6 或更高版本!

    不相信它有效?签出this

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-01
      • 2020-06-05
      • 2020-03-12
      • 2020-01-30
      • 2017-12-24
      • 2018-05-31
      • 2019-04-25
      • 1970-01-01
      相关资源
      最近更新 更多