構文をご容赦ください。私はvue.jsを初めて使用するため、用語が正しくない場合があります。
CreateTodo.vueという名前の単一ファイルコンポーネント(SFC)があります。 (name
プロパティで)「create-todo-item」という名前を付けました。 app.vueファイルにインポートすると、マークアップ<create-todo>
を使用する場合にのみコンポーネントを使用できます。 <create-todo-item>
を使用すると、コンポーネントがページに表示されません。
それ以来、app.vueにcomponents: { 'create-todo-item': CreateTodo }
ではなくcomponents: { CreateTodo }
の形式でコンポーネントをリストすることで、私がやりたいことを実行できることがわかりました。
私の質問はこれです:name
プロパティでコンポーネントに名前を付ける意味はありますか?コンシューマーではそれは尊重されていません。空のままにすると、アプリはエラーなしで実行されます。
また、vue-loaderがPascalCaseインポートステートメントに基づいてテンプレート用にkebab-case要素名を割り当てていると私は確信していますか?
これは、SFCに名前を付けようとするコードです(CreateTodo.vue)。
<script>
export default {
name: 'create-todo-item',
data() {
return {
titleText: '',
projectText: '',
isCreating: false,
};
},
};
</script>
コンポーネントにリストされている名前は、私のApp.vueによって無視されます。要素が<create-todo>
ではなく<create-todo-item>
であっても、htmlは正常にレンダリングされます。
<template>
<div>
<!--Render the TodoList component-->
<!--TodoList becomes-->
<todo-list v-bind:todos="todos"></todo-list>
<create-todo v-on:make-todo="addTodo"></create-todo>
</div>
</template>
<script>
import TodoList from './components/TodoList.vue'
import CreateTodo from './components/CreateTodo.vue'
export default {
name: 'app',
components: {
TodoList,
CreateTodo,
},
// data function avails data to the template
data() {
return {
};
},
methods: {
addTodo(todo) {
this.todos.Push({
title: todo.title,
project: todo.project,
done: false,
});
},
}
};
</script>
以下は、name
プロパティを使用しない私のCreateTodo.vueです。
<script>
export default {
data() {
return {
titleText: '',
projectText: '',
isCreating: false,
};
},
};
</script>
そして、変更されたコンポーネントを使用した私のApp.vueは次のとおりです。
<template>
<div>
<!--Render the TodoList component-->
<!--TodoList becomes-->
<todo-list v-bind:todos="todos"></todo-list>
<create-todo-item v-on:make-todo="addTodo"></create-todo-item>
</div>
</template>
<script>
import TodoList from './components/TodoList.vue'
import CreateTodo from './components/CreateTodo.vue'
export default {
name: 'app',
components: {
TodoList,
'create-todo-item': CreateTodo,
},
// data function avails data to the template
data() {
return {
};
},
methods: {
addTodo(todo) {
this.todos.Push({
title: todo.title,
project: todo.project,
done: false,
});
},
}
};
</script>
最初に、SFCモジュールの.name
プロパティは、デバッグの便宜にすぎないことに注意してください。 (これは再帰にも役立ちます。)それ以外は、コンポーネントを親コンポーネントにローカルに登録する場合は特に問題になりません。
具体的な詳細については、最初の例では、ES2015の省略表記を使用しています
components: {
TodoList,
CreateTodo,
},
に相当
components: {
'TodoList': TodoList,
'CreateTodo': CreateTodo
},
CreateTodo
としてインポートされるコンポーネントには、'CreateTodo'
と同等の名前<create-todo>
が付けられます。
2番目の例では、略記を省略して明示的に名前を付けます。
components: {
TodoList,
'create-todo-item': CreateTodo,
},
それは同等です、ところで
components: {
TodoList,
'CreateTodoItem': CreateTodo,
},
したがって、その場合は、コンポーネントに'CreateTodoItem'
、または<create-todo-item>
という名前を付けていることがわかります。