Javascript 尽管已注册,但Vue组件未知
我正在尝试在另一个组件中组合一个组件,如下所示:Javascript 尽管已注册,但Vue组件未知,javascript,templates,vue.js,Javascript,Templates,Vue.js,我正在尝试在另一个组件中组合一个组件,如下所示: <prompt :users="users"> ... <dataset v-for="ds in users" :user="user"></dataset> ... </prompt> 最后,模板: <template id="dataset-template"> <li>{{ user}}</li> </template>
<prompt :users="users">
...
<dataset v-for="ds in users" :user="user"></dataset>
...
</prompt>
最后,模板:
<template id="dataset-template">
<li>{{ user}}</li>
</template>
<template id="prompt-template">
<transition name="modal">
<div class="modal-mask">
<div class="modal-wrapper">
<div class="modal-container">
<div class="modal-header">
<slot name="header">
default header
</slot>
</div>
<div class="modal-body">
<slot name="body">
</slot>
</div>
<div class="modal-footer">
<slot name="footer">
default footer
<button class="modal-default-button" @click="$emit('close')">
OK
</button>
</slot>
</div>
</div>
</div>
</div>
</transition>
</template>
{{user}}
默认标题
默认页脚
好啊
有什么我遗漏的步骤吗?我无法弄清楚该组件是如何未注册的。问题是您使用
数据集组件作为提示符组件中的插槽。当Vue虚拟机试图找出组件树时,它将识别它不知道的dataset
组件子组件在组件模板中使用,但不在插槽中使用。您必须在Vue vm中注册数据集
组件,就像在提示符
组件中一样。试试这个
Vue.component('promp', { ... })
Vue.component('dataset', { ... })
在同一级别上注册组件也是有意义的,因为组件的模板也在同一级别上注册(彼此相邻)。
与之比较:此处子组件轴标签
仅在父测谎仪
组件的模板内使用。这是有效的,因为现在该组件与it子组件(而不是vue vm)签订了合同
换言之:
应该可以将组件传递到任何组件A
的插槽中,这些组件不是A
的子组件。因此,传递到组件插槽的所有组件都应可用于vue vm
拇指尺可能是
如果一个组件没有出现在另一个组件模板中,它就不是一个子组件。在这种情况下,从
中删除插槽标记不应该使错误消失吗?我试图删除它,但错误仍然出现,它可能是有点混乱。其本质是,如果您在应用程序的主元素中使用组件,则应在vue vm级别注册这些组件。有时您可能希望在提示符外显示dataset
组件dataset
实际上不是prompt
的子组件,不是吗?它更像是要在提示符
组件中显示的组件,这就是通过插槽传递它的原因。实际上,数据集
应该是一个子组件,与我链接到的SVG示例非常类似。这就是我在提示符组件中注册它的原因。但是,您不能将它用作插槽,只能在提示符组件的模板中使用它。比如:`……`。它与插槽无关,您需要插槽将组件传递到另一个组件。这就是你想在这里做的。但这意味着数据集不是一个子组件。如果它是一个子组件,您必须在模板中使用它,如上面评论中所述。我的意思是,将来使用具有不同内容的提示组件不是很好吗?也许有一天你想要
。或者将来您想在另一个地方使用dataset
组件?
<template id="dataset-template">
<li>{{ user}}</li>
</template>
<template id="prompt-template">
<transition name="modal">
<div class="modal-mask">
<div class="modal-wrapper">
<div class="modal-container">
<div class="modal-header">
<slot name="header">
default header
</slot>
</div>
<div class="modal-body">
<slot name="body">
</slot>
</div>
<div class="modal-footer">
<slot name="footer">
default footer
<button class="modal-default-button" @click="$emit('close')">
OK
</button>
</slot>
</div>
</div>
</div>
</div>
</transition>
</template>
Vue.component('promp', { ... })
Vue.component('dataset', { ... })