Vue - 无法将特定值传递给更高的组件

Posted

技术标签:

【中文标题】Vue - 无法将特定值传递给更高的组件【英文标题】:Vue - Unable pass specific value to higher component 【发布时间】:2020-11-10 08:11:35 【问题描述】:

我得到以下信息 - 无法读取未定义的“免费”属性。

我将在多个页面上添加此按钮组件,并且我有数据对象,它允许我根据我希望在页面上显示的任何页面添加文本。例如,如果它在主页上我想使用<buttons :text="buttonText.free" />,而在关于我们的页面上我想使用<buttons :text="buttonText.spend" />

模板文件

<template>
  <main class="container">
    <buttons :text="buttonText.free" />
  </main>
</template>

<script>
import Buttons from '~/components/atoms/buttons.vue'

export default 
  components: 
    Buttons
  

</script>

组件文件

<template>
  <div>
    <button class="button"">
      <span> buttonText </span>
    </button>
  </div>
</template>

<script>
export default 
  props: 
    text: String
  ,
  data () 
    return 
      buttonText: 
        free: 'free',
        spend: 'spend',
        now: 'now',
        nowFree: 'now free'
      
    
  

</script>

你能告诉我我做错了什么吗?

【问题讨论】:

【参考方案1】:

由于使用了“现在”,因此不得不提出不同的结构。但我收到以下错误 - 无法读取未定义的属性“真实”。

<template>
  <div>
    <button class="button" :class="type" :style=" 'width': width ">
      <span> buttonText[this.type] </span>
    </button>
  </div>
</template>

<script>
export default 
  props: 
    type: String,
    width: String,
    buttonText: 
      free: 'Play free',
      real: 'Play now for real'
    
  

</script>
<template>
  <main class="container">
    <buttons type="real" />
  </main>
</template>

<script>
import Buttons from '~/components/atoms/buttons.vue'

export default 
  components: 
    Buttons
  

</script>

我做错了什么?

【讨论】:

【参考方案2】:

模板.vue

<template>
  <main class="container">
    <buttons :text="your customized text" />
  </main>
</template>

<script>
import Buttons from '~/components/atoms/buttons.vue'

export default 
  components: 
    Buttons
  

</script>

buttons.vue

<template>
  <div>
    <button class="button">
      <span> text </span>
    </button>
  </div>
</template>

<script>
export default 
  props: 
    text: String
  

</script>

这里有一个简单的解决方案来解决您的问题 但是你需要学习更多关于 vue 组件的基础知识vue component doc

【讨论】:

【参考方案3】:

您应该在父组件的data 属性中定义您的数据。在template 标签内使用的所有变量都将从组件的datacomputedprops 中获取。您正在将 undefined buttonText 数据传递给您的 buttons 组件。

<template>
  <main class="container">
    <buttons :text="buttonText.free" />
  </main>
</template>

<script>
import Buttons from '~/components/atoms/buttons.vue'

export default 
data() 
  return 
    buttonText: 
        free: 'free',
        spend: 'spend',
        now: 'now',
        nowFree: 'now free'
      
  
,
  components: 
    Buttons
  

</script>

并且在您的buttons 组件中,只需接受父组件传递的道具。在这种情况下,您使用text 作为buttons 组件的道具。

<template>
  <div>
    <button class="button"">
      <span> text </span>
    </button>
  </div>
</template>

<script>
export default 
  props: 
    text: String
  

</script>

【讨论】:

以上是关于Vue - 无法将特定值传递给更高的组件的主要内容,如果未能解决你的问题,请参考以下文章

将值从数据库传递到 vue 组件并将其分配给变量

无法在 Vue3 中传递多个道具

我可以禁用特定组件的某些 Vue 警告吗?

将一个变量的值从子组件传递给两个父组件,vuejs? nuxt

如何将初始表单值传递给 Vue.js 中的子组件?

Vue将props值实时传递 并可修改