【问题标题】:Vuejs - Component not rendering to screenVuejs - 组件未呈现到屏幕
【发布时间】:2020-08-25 21:51:52
【问题描述】:

我正在尝试创建一个用于预算跟踪的 vue 应用程序,并且我有一个 BudgetItems 组件,我想在 /budget 路由中呈现它。所有其他组件和原始 HTML 呈现,但这个组件没有

这是 BudgetItems 组件:

<template>
    <div>
        <BudgetItem v-for="item in Items" v-bind:key='item.id' v-bind:Item="item" />        
    </div>
</template>

<script>
import BudgetItem from './BudgetItem'
export default {
    name: 'BudgetItems',
    components: {
        BudgetItem,
    },
    props: [
        'Items'
    ]
}
</script>

这是我用来渲染单个项目的 BudgetItem 组件:

<template>
    <div class="budgetitem">
        <h1>{{item.title}}</h1>
        <h1>{{item.value}}</h1>
    </div>
</template>

<script>
export default {
    name: 'BudgetItem',
    props: [
        'Item'
    ]
}
</script>

最后,这是预算页面视图:

<template>
  <div class="budget">
      <Nav />
      <h1>Budget</h1>
      <BudgetItems v-bind:Items="items" />
  </div>
</template>

<script>
import Nav from "../components/Nav"
import BudgetItems from "../components/BudgetItems"
export default {
  name: 'Budget',
  components: {
    Nav,
    BudgetItems,
  },
  data(){
    return{
      items: [
        {
          id: 1,
          income: false,
          title: "Item 1",
          value: 200
        },
        {
          id: 2,
          income: true,
          title: "Item 2",
          value: 500
        },
        {
          id: 3,
          income: false,
          title: "Item 3",
          value: 10
        },
      ]
    }
  }
}
</script>

另外,当我查看 vue 开发工具选项卡时,该组件出现了,它只是没有显示在屏幕上

【问题讨论】:

  • 如果它在开发工具中,我怀疑它也在 DOM 检查器中?是不是您将 CSS 分配给了隐藏项目的“budgetitem”类?
  • &lt;BudgetItems v-bind:Items="items" /&gt;,props 应该使用小写。所以把它改成v-bind:items。并更正 BudgetItems 中的声明=道具项目。
  • 这能回答你的问题吗? vuejs - computed is not working with props
  • 问题的原因是BudgetItem.vue中的大小写不匹配。请注意,您在模板中使用了 item,但 prop 实际上是 Item(大写)。 codesandbox

标签: vue.js


【解决方案1】:

您需要将v-bind 声明更改为小写。将Items 和Item 的每个实例替换为items 和item。

Vue.JS 不喜欢在使用绑定时将 props 大写。

更多解释请read this。

本质上,浏览器将所有属性名称都视为小写。因此,它将“Items”解释为“items”。

预算页面浏​​览量:

&lt;BudgetItems v-bind:items="items" /&gt;

预算项目:

&lt;BudgetItem v-for="item in items" v-bind:key='item.id' v-bind:item="item"/&gt;

props: [
    'items'

]

预算项目:

props: [
    'item'
]

进行这些更改后,它会完美运行,如下所示:

【讨论】:

  • 在这里使用大写的Items 和Item 在技术上没有任何问题。案例确实只在 DOM 模板中很重要,但 OP 使用的是 SFC,因此该建议不适用。
猜你喜欢
  • 2016-12-14
  • 2017-12-02
  • 2018-09-25
  • 1970-01-01
  • 1970-01-01
  • 2016-12-01
  • 2020-06-08
  • 2012-10-19
  • 1970-01-01
相关资源
最近更新 更多