Vue.jsの不明なカスタム要素


89

私はVue.jsの初心者で、日常のタスクに対応するアプリを作成しようとしていますが、Vueコンポーネントに遭遇しました。以下は私が試したものですが、残念ながら、このエラーが発生します。

vue.js:1023 [Vue警告]:不明なカスタム要素:-コンポーネントを正しく登録しましたか?再帰コンポーネントの場合は、必ず「名前」オプションを指定してください。

何かアイデア、助けてください?

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>

回答:


122

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.component('exampleComponent', require('./components/ExampleComponent.vue')); //component name should be in camel-case

あなたがあなたの中にあなたのコンポーネントを追加することができた後vue el

<example-component></example-component>

したがって、コンポーネントが多数ある場合は、それをコンポーネント配列にバインドする必要がありますか?
Juliver Galleto 2016

確かに@CodeDemon。あなたが使用する場合は、それを短くすることができますES6ので、同様に、components: {myTask},そのいくつかの小さなコンポーネントまたは場合は、内部でそれを作成することができ、componentsプロパティ。しかし、アプリの規模が大きいため、これは良い方法ではないようです。
GONG 2016

私がこのVue警告を持っている理由のアイデア:vue.js:1023 [Vue警告]:データ関数はオブジェクトを返す必要があります。(コンポーネントにあります:<my-task>)?
Juliver Galleto 2016

4
コンポーネントでそのように書く必要があります: data: function() { return { property1: 1, property2: 2 } }
GONG 2016

私の場合、コンポーネントのスペルをコンポーネントとして間違っていました。したがって、このエラーが発生しました。
mehul9595 2017年

57

Vue.component()前に定義するだけnew vue()です。

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

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

更新

  • HTMLはに変換さ<anyTag> れます<anytag>
  • したがって、コンポーネントの名前に大文字を使用しないでください
  • <myTag>使用する代わりに<my-tag>

Githubの問題:https//github.com/vuejs/vue/issues/2308


2
これが問題の主な答えになるはずです。vuejsのドキュメントから、Vue.componentをルート(または)のに配置する必要があることを確認できますnew Vue({})
ファビアン

2

これで解決しました。オブジェクトである3番目の引数を指定しました。

in app.js(laravelとwebpackでの作業):

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

2

使いすぎないでくださいVue.component()。コンポーネントをグローバルに登録します。ファイルを作成し、MyTask.vueという名前を付け、そこにVueオブジェクトhttps://vuejs.org/v2/guide/single-file-components.html をエクスポート してから、メインファイルにインポートし、登録することを忘れないでください。 :

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

1

コンポーネントをコンポーネントに追加したことを確認してください。

例えば:

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

0

これは、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

この問題が発生したとき、https: //vuejs.org/v2/guide/index.htmlでVueのドキュメントをフォローしていました。

後でそれらは構文を明確にします:

これまで、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({})インスタンス化の前に来ることを確認してください。


0

私が持っていた同じエラーを

[Vue警告]:不明なカスタム要素:-コンポーネントを正しく登録しましたか?再帰コンポーネントの場合は、必ず「名前」オプションを指定してください。

しかし、私npm install && npm run devはjsファイルをコンパイルするために実行するのを完全に忘れました。

多分これは私のような初心者を助けます。


0

OK、このエラーは明白に思えるかもしれませんが、ある日、コンポーネント2回宣言したことを見つけるための答えを探していました。2回宣言してもVueJSはまったく文句を言わないので、それは私を苛立たせていました。明らかに、間にたくさんのコードがあり、新しいコンポーネントを追加したときに、宣言を一番上に配置しました。底に近い。次回はこれを最初に探して、多くの時間を節約します

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.