vue template style example component javascript vue.js

javascript - template - vue router



Vue.js elemento personalizado desconocido (7)

Soy un principiante con Vue.js y estoy tratando de crear una aplicación que satisfaga mis tareas diarias y me encontré con Vue Components. Así que a continuación es lo que he intentado, pero desafortunadamente, me da este error:

vue.js: 1023 [Vue warn]: Elemento personalizado desconocido: ¿registró correctamente el componente? Para componentes recursivos, asegúrese de proporcionar la opción "nombre".

Alguna idea, ayuda, por favor?

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>


Asegúrese de haber agregado el componente a los componentes.

Por ejemplo:

export default { data() { return {} }, components: { ''lead-status-modal'': LeadStatusModal, }, }


Esta es una buena manera de crear un componente en 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'' });


Estaba siguiendo la documentación de Vue en https://vuejs.org/v2/guide/index.html cuando me encontré con este problema.

Más tarde aclaran la sintaxis:

Hasta ahora, solo hemos registrado componentes a nivel mundial, utilizando Vue.component:

Vue.component(''my-component-name'', { // ... options ... })

Los componentes registrados globalmente se pueden usar en la plantilla de cualquier instancia de Vue raíz (nueva Vue) creada posteriormente , e incluso dentro de todos los> subcomponentes del árbol de componentes de esa instancia de Vue.

( https://vuejs.org/v2/guide/components.html#Organizing-Components )

Entonces, como dice Umesh Kadam anteriormente, solo asegúrese de que la definición del componente global venga antes de la instanciación var app = new Vue({}) .


Esto lo resolvió para mí: proporcioné un tercer argumento como objeto.

en app.js (trabajando con laravel y webpack):

Vue.component(''news-item'', require(''./components/NewsItem.vue''), { name: ''news-item'' });


No Vue.component() exceso Vue.component() , registra componentes a nivel mundial. Puede crear el archivo, asígnele el nombre MyTask.vue, exportar allí el objeto Vue https://vuejs.org/v2/guide/single-file-components.html y luego importarlo en su archivo principal, y no olvide registrarlo. :

new Vue({ ... components: { myTask } ... })


Olvidó la sección de components en su Vue initialization . Entonces Vue en realidad no sabe acerca de su componente.

Cámbielo a:

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() { } });

Y aquí está jsBin, donde todo parece funcionar correctamente: http://jsbin.com/lahawepube/edit?html,js,output

ACTUALIZAR

A veces, desea que sus componentes sean visibles globalmente para otros componentes.

En este caso, debe registrar sus componentes de esta manera, antes de la Vue initialization o export Vue initialization (en el caso de que desee registrar un componente del otro componente)

Vue.component(''exampleComponent'', require(''./components/ExampleComponent.vue'')); //component name should be in camel-case

Después de que pueda agregar su componente dentro de su vue el :

<example-component></example-component>


Simplemente defina Vue.component() antes de new vue() .

Vue.component(''my-task'',{ ....... }); new Vue({ ....... });

actualizar

  • HTML convierte <anyTag> a <anytag>
  • Así que no use letras mayúsculas para el nombre del componente
  • En lugar de <myTag> use <my-tag>

Problema de Github: https://github.com/vuejs/vue/issues/2308