Vue.js 缺少必需的道具

Posted

技术标签:

【中文标题】Vue.js 缺少必需的道具【英文标题】:Vue.js missing required prop 【发布时间】:2018-10-21 06:59:03 【问题描述】:

我刚开始使用 Vue.js,所以也许我错过了一些明显的东西。为了练习自己,我尝试做一个简单的 treeView 组件(带有子组件 'treeViewItem' )。我在 treeView 上只有 1 个属性,即项目列表:items 这是 treeView 组件:

@Component
export default class treeView extends Vue 
    @Prop(
        required: true
    )
    items!: treeViewItemOptions[];

我像这样初始化了“Vue”:

let v = new Vue(
    el: "#app",
    template: `
    <div>
        <tree-view :items="items" />
    </div>
    `,
    data: 
        items: treeViewItems
    
);

我收到此错误:'[Vue warn]: Missing required prop: "items"

我正在使用带有vue-property-decorator的打字稿 另外,我正在运行vue 2.5.16 和vue-property-decorator 6.0.0

谢谢,

编辑 1 我尝试在treeView.vue 文件中用简单的&lt;li&gt; 替换&lt;treeViewItem&gt;

<template>
    <ul>
        <!-- it works if I replace the following <treeViewItem> for <li> -->
        <treeViewItem v-for="item in items" v-bind:key="item.id" v-bind:item="item"></treeViewItem>
    </ul>
</template>

我没有收到关于“项目”道具的任何错误,我什至看到在 html 代码中生成了一对&lt;li&gt;,所以items 正在工作,只是在我使用我的treeViewItem 组件时没有!

这里是另一个组件:

@Component
export default class treeViewItem extends Vue 
    @Prop(
        required: true
    )
    item!: treeViewItemOptions[];    

【问题讨论】:

您是否尝试将数据更改为函数? data () return items: treeViewItems ? 检查treeViewItems是否有数据。 你确定items!: 不应该是items: 吗? @ittus 是的,我确实尝试了一个函数,结果相同 @gypsyCoder 是的,我只有一个测试程序,treeViewItems 变量在创建 Vue 之前就行初始化 【参考方案1】:

我发现了问题,子组件导入了错误的ts文件:

<script lang="ts">
    import treeViewItem from './treeView';
    export default treeViewItem;
</script>

代替

<script lang="ts">
    import treeViewItem from './treeViewItem';
    export default treeViewItem;
</script>

该死的,复制粘贴!

【讨论】:

以上是关于Vue.js 缺少必需的道具的主要内容,如果未能解决你的问题,请参考以下文章

Vue.js 3,Quasar 2 - 组件缺少模板或渲染功能

自定义道具类型 Vue.js

使用编程导航 Vue.js 传递道具

如何在 Vue.js 中将实例化的 Vue 组件作为道具传递?

在 vue.js 组件中声明 typescript 接口道具

Vue.js:从其方法内部更改组件道具的正确方法