Nieznany element niestandardowy Vue.js


90

Jestem początkującym użytkownikiem Vue.js i próbuję stworzyć aplikację, która zaspokoi moje codzienne zadania i natknąłem się na Vue Components. Więc poniżej jest to, co próbowałem, ale niestety daje mi ten błąd:

vue.js: 1023 [Vue warn]: Nieznany element niestandardowy: - czy poprawnie zarejestrowałeś komponent? W przypadku komponentów rekurencyjnych upewnij się, że podano opcję „nazwa”.

Jakieś pomysły, pomoc, proszę?

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>

Odpowiedzi:


122

Zapomniałeś o componentssekcji w swoim Vue initialization. Więc Vue tak naprawdę nie wie o twoim komponencie.

Zmień to na:

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

 }

});

A oto jsBin, gdzie wszystko wydaje się działać poprawnie: http://jsbin.com/lahawepube/edit?html,js,output

AKTUALIZACJA

Czasami chcesz, aby komponenty były globalnie widoczne dla innych komponentów.

W takim przypadku musisz zarejestrować swoje komponenty w ten sposób, przed Vue initializationlub export(w przypadku, gdy chcesz zarejestrować komponent z innego komponentu)

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

Po dodaniu komponentu do vue el:

<example-component></example-component>

Więc jeśli mam wiele komponentów, powinienem powiązać je z tablicą komponentów?
— Juliver Galleto,

Na pewno @CodeDemon. Możesz go skrócić, jeśli użyjesz ES6, na przykład, components: {myTask},lub jeśli jest to jakiś mały element, możesz go utworzyć wewnątrz componentswłaściwości. Ale wydaje się, że nie jest to dobry sposób ze względu na skalę aplikacji.
— GONG,

Wszelkie pomysły, dlaczego mam to ostrzeżenie Vue: vue.js: 1023 [Vue warn]: funkcje danych powinny zwrócić obiekt. (znalezione w komponencie: <my-task>)?
— Juliver Galleto,

4
trzeba to napisać tak w komponentach: data: function() { return { property1: 1, property2: 2 } }
— GONG

w moim przypadku nieprawidłowo zapisałem komponenty jako komponent. stąd mam ten błąd.
— mehul9595

57

Po prostu zdefiniuj Vue.component()wcześniej new vue().

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

new Vue({
    .......
});

aktualizacja

  • HTML konwertuje <anyTag> do<anytag>
  • Dlatego nie używaj wielkich liter jako nazwy komponentu
  • Zamiast <myTag>używać<my-tag>

Wydanie Github: https://github.com/vuejs/vue/issues/2308


2
To powinna być główna odpowiedź na problem. Mogę potwierdzić na podstawie dokumentacji vuejs i wypróbowując, że Vue.component powinien być umieszczony przed rootem (lub new Vue({})).
— Fabián

2

To mnie rozwiązało: podałem trzeci argument będący przedmiotem.

in app.js(praca z laravel i webpack):

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


1

Upewnij się, że dodałeś komponent do komponentów.

Na przykład:

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

0

To dobry sposób na stworzenie komponentu w 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'
});

0

Śledziłem dokumentację Vue na https://vuejs.org/v2/guide/index.html, kiedy napotkałem ten problem.

Później wyjaśniają składnię:

Jak dotąd na całym świecie zarejestrowaliśmy tylko komponenty, używając komponentu Vue.com:

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

Globalnie zarejestrowane komponenty mogą być używane w szablonie dowolnej głównej instancji Vue (nowej Vue) utworzonej później - a nawet wewnątrz wszystkich> podkomponentów drzewa komponentów tej instancji Vue.

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

Tak więc, jak mówi Umesh Kadam powyżej, po prostu upewnij się, że definicja komponentu globalnego jest poprzedzona var app = new Vue({})instancją.


0

Miałem ten sam błąd

[Vue warn]: Nieznany element niestandardowy: - czy poprawnie zarejestrowałeś komponent? W przypadku komponentów rekurencyjnych upewnij się, że podano opcję „nazwa”.

jednak zupełnie zapomniałem uruchomić npm install && npm run devkompilacji plików js.

może to pomoże początkującym takim jak ja.


0

OK, ten błąd może wydawać się oczywisty, ale pewnego dnia szukałem odpowiedzi, PO PROSTU OKAZAŁEM SIĘ, ŻE MIAŁEM 2 razy zadeklarowane KOMPONENTY . doprowadzało mnie to do szału bo VueJS w ogóle nie narzeka gdy deklarujesz to 2 razy, oczywiste miałem dużo kodu w międzyczasie, a jak dodałem nowy komponent, deklarację umieściłem na górze, podczas gdy ja też miałem blisko dna. Więc następnym razem poszukaj tego najpierw, oszczędza dużo czasu

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.