Неизвестный пользовательский элемент Vue js
Я начинаю с Vue JS, и я пытаюсь создать приложение, которое обслуживает мои ежедневные задачи, и я столкнулся с Vue Components. Итак, вот что я пробовал, но, к сожалению, это дает мне эту ошибку:
vue.js: 1023 [Vue warn]: Неизвестный пользовательский элемент: - правильно ли вы зарегистрировали компонент? Для рекурсивных компонентов обязательно укажите параметр "имя".
Любые идеи, пожалуйста, помогите?
new Vue({
el : '#app',
data : {
tasks : [
{ name : "task 1", completed : false},
{ name : "task 2", completed : false},
{ name : "task 3", completed : true}
]
},
methods : {
},
computed : {
},
ready : function(){
}
});
Vue.component('my-task',{
template : '#task-template',
data : function(){
return this.tasks
},
props : ['task']
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/1.0.26/vue.js"></script>
<div id="app">
<div v-for="task in tasks">
<my-task :task="task"></my-task>
</div>
</div>
<template id="task-template">
<h1>My tasks</h1>
<div class="">{{ task.name }}</div>
</template>
Ответы
Ответ 1
Вы забыли о разделе components
в вашей Vue initialization
. Так что Vue фактически не знает о вашем компоненте.
Измените его на:
var myTask = Vue.component('my-task', {
template: '#task-template',
data: function() {
return this.tasks; //Notice: in components data should return an object. For example "return { someProp: 1 }"
},
props: ['task']
});
new Vue({
el: '#app',
data: {
tasks: [{
name: "task 1",
completed: false
},
{
name: "task 2",
completed: false
},
{
name: "task 3",
completed: true
}
]
},
components: {
myTask: myTask
},
methods: {
},
computed: {
},
ready: function() {
}
});
И вот jsBin, где все, кажется, работает правильно: http://jsbin.com/lahawepube/edit?html,js,output
ОБНОВИТЬ
Иногда вы хотите, чтобы ваши компоненты были глобально видимыми для других компонентов.
В этом случае вам необходимо зарегистрировать свои компоненты таким образом, перед Vue initialization
или export
Vue initialization
(в случае, если вы хотите зарегистрировать компонент из другого компонента)
Vue.component('exampleComponent', require('./components/ExampleComponent.vue')); //component name should be in camel-case
После того, как вы можете добавить свой компонент в свой vue el
:
<example-component></example-component>
Ответ 2
Просто определите Vue.component()
до new vue()
.
Vue.component('my-task',{
.......
});
new Vue({
.......
});
Обновление
- HTML преобразует
<anyTag>
в <anyTag>
- Поэтому не используйте буквы capital для имени компонента
- Вместо
<myTag>
используйте <my-tag>
Проблема Github: https://github.com/vuejs/vue/issues/2308
Ответ 3
Я следил за документацией Vue по адресу https://vuejs.org/v2/guide/index.html, когда я столкнулся с этой проблемой.
Позже они уточняют синтаксис:
До сих пор мы только зарегистрировали компоненты по всему миру, используя Vue.component:
Vue.component('my-component-name', {
// ... options ...
})
Зарегистрированные на глобальном уровне компоненты могут использоваться в шаблоне любого корневого экземпляра Vue (нового Vue), созданного впоследствии, и даже внутри всех подкомпонентов этого дерева компонентов экземпляров Vue.
(https://vuejs.org/v2/guide/components.html#Organizing-Components)
Так как Umesh Kadam говорит выше, просто убедитесь, что определение глобального компонента происходит до создания экземпляра var app = new Vue({})
.
Ответ 4
Это хороший способ создать компонент в vue.
let template = '<ul>
<li>Your data here</li>
</ul>';
Vue.component('my-task', {
template: template,
data() {
},
props: {
task: {
type: String
}
},
methods: {
},
computed: {
},
ready() {
}
});
new Vue({
el : '#app'
});
Ответ 5
Убедитесь, что вы добавили компонент в компоненты.
Например:
export default {
data() {
return {}
},
components: {
'lead-status-modal': LeadStatusModal,
},
}
Ответ 6
Это разрешило это для меня: я поставил третий аргумент, являющийся объектом.
в app.js
(работает с laravel и webpack):
Vue.component('news-item', require('./components/NewsItem.vue'), {
name: 'news-item'
});
Ответ 7
Не злоупотребляйте Vue.component()
, он регистрирует компоненты по всему миру. Вы можете создать файл, назовите его MyTask.vue, экспортируете там объект Vue https://vuejs.org/v2/guide/single-file-components.html, а затем импортируете в свой основной файл и не забудьте его зарегистрировать:
new Vue({
...
components: { myTask }
...
})