Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vue.js 将vue组件传递给子组件_Vue.js - Fatal编程技术网

Vue.js 将vue组件传递给子组件

Vue.js 将vue组件传递给子组件,vue.js,Vue.js,我正在尝试创建一个Vue组件,该组件将接受一个组件作为参数来显示数据,但我很难弄清楚如何使其工作。如果全局注册显示组件(使用Vue.component()),它可以工作,但如果在本地注册,则会出现以下错误: [Vue warn]: Unknown custom element: <my-link> - did you register the component correctly? For recursive components, make sure to provide the

我正在尝试创建一个Vue组件,该组件将接受一个组件作为参数来显示数据,但我很难弄清楚如何使其工作。如果全局注册显示组件(使用Vue.component()),它可以工作,但如果在本地注册,则会出现以下错误:

[Vue warn]: Unknown custom element: <my-link> - did you register the component correctly? For recursive components, make sure to provide the "name" option.
[Vue warn]:未知自定义元素:-您是否正确注册了组件?对于递归组件,请确保提供“name”选项。
有谁能告诉我如何在当地注册

主要组成部分:

<template>
    <div>
        <my-list :items="items" :renderer="renderer"></my-list>
    </div>
</template>
<script>
import MyList from './my-list'
export default {
    components: {
        'my-list': MyList,
        'my-link': {
            props: { data: Object },
            template: '<span>{{ data.Name }}</span>'
        }
    },
    data() {
        return {
            items: [
                { id: 1, Name: 'One' },
                { id: 2, Name: 'Two' }
            ],
            renderer: 'my-link'
        }
    }
}
</script>
<template>
    <div>
        <div v-for="item in items" :key="item.id">
            <div :is="renderer" :data="item"></div>
        </div>
    </div>
</template>
<script>
export default {
    props: { 
        items: Array,
        renderer: String
    }
}
</script>

从“/my list”导入MyList
导出默认值{
组成部分:{
“我的列表”:MyList,
“我的链接”:{
道具:{data:Object},
模板:“{data.Name}”
}
},
数据(){
返回{
项目:[
{id:1,名称:'One'},
{id:2,名称:'Two'}
],
渲染器:“我的链接”
}
}
}
MyList组件:

<template>
    <div>
        <my-list :items="items" :renderer="renderer"></my-list>
    </div>
</template>
<script>
import MyList from './my-list'
export default {
    components: {
        'my-list': MyList,
        'my-link': {
            props: { data: Object },
            template: '<span>{{ data.Name }}</span>'
        }
    },
    data() {
        return {
            items: [
                { id: 1, Name: 'One' },
                { id: 2, Name: 'Two' }
            ],
            renderer: 'my-link'
        }
    }
}
</script>
<template>
    <div>
        <div v-for="item in items" :key="item.id">
            <div :is="renderer" :data="item"></div>
        </div>
    </div>
</template>
<script>
export default {
    props: { 
        items: Array,
        renderer: String
    }
}
</script>

导出默认值{
道具:{
项目:阵列,
渲染器:字符串
}
}

您看到此警告是因为您尚未在试图使用它的组件的范围内注册
我的链接。您在主组件中注册了
my link
,但MyList组件无权访问该范围

my link
的组件定义移动到MyList组件的
components
属性将解决此问题


或者,您可以为
my link
组件创建一个新的单文件组件,并将其导入到需要使用它的任何位置。就像您对
my list
组件所做的一样


如果希望
my link
组件可以全局访问,则需要通过
Vue.component
在实例化根Vue实例的任何位置注册它(如果使用
Vue cli
设置项目,可能在
src/main.js
中注册):

Vue.component('my-link'{
道具:{data:Object},
模板:“{data.Name}”
});
新Vue({
el:“#应用程序”,
...
});


如果您确实想将组件传递到子组件,而不注册到该子组件,那么可以按照@BertEvans的建议进行

如果希望能够使用MyList组件中的
my link
组件,则需要将
import MyLink from./my link'
添加到MyList组件中脚本的顶部scope@thanksd没有“./我的链接”。另外,我希望能够使用任何组件:MyList不需要知道它可以使用哪些组件。啊,我误读了我的列表和我的链接为什么不使用插槽?@laurian你可能想看看它的来源。插槽正是他用于自定义单元格的。我忘了添加“我的列表”组件。。。对不起。我更新了我的问题。没有其他方法吗?我可以将组件作为对象传递,比如渲染器:{template:..},但是如何在MyList上使用它呢?请参阅我更新的答案。这是你可以做到的三种方法。我不相信还有其他方法。大概你可以将对象定义作为属性传递。@BertEvans你能详细说明一下吗?