首页 > 解决方案 > 我如何接收和传递“v-”道具给孩子们?

问题描述

我想要一些包装器组件,正如您可能猜到的那样,其主要目的只是以某种方式设置样式并包含传递的子项/已传递的道具。

我有包装组件:

// components/FancyButton.vue

<template>
  <button class="fancy-button">
    <slot />
  </button>
</template>

如何将“v-”道具传递给它<button>以便处理 click ?

// components/App.vue

<template>
  <FancyButton v-on:click="doSomething()"> <!-- props go to nowhere -->
    Some children
  </FancyButton>
</template>

<script>
import FancyButton from './FancyButton'

export default {
  components: {
    FancyButton
  }
}
</script>

标签: javascriptvue.js

解决方案


要将属性传递给组件,您必须在组件中声明它,然后v-bind在使用组件时使用语法。

例如,如果这是您的组件:

<template>
    <button class="fancy-button">
    <slot />
</button>
</template>

在模板的脚本部分:

<script>
   module.exports = {

      /...
      props: {
         yourData {
           type: DATA_TYPE
         }
      }
  }
  </script>

在包装器组件中,您执行以下操作:

<template>
   <FancyButton v-on:click="doSomething()" v-bind:yourData=""> 
        Some children
   </FancyButton>
</template>

要将函数作为道具传递,请执行以下操作:

<script>
   module.exports = {

      /...
      props: {
         yourData {
           type: Function
         }
      }
  }
  </script>

这通常是不鼓励的,您可以使用事件来实现您想要的相同逻辑。

我建议阅读以下文章:

如何在 Vue 中将函数作为 Prop 传递

在 Vue.js 中将函数作为 props 传递是一种反模式


推荐阅读