1.组件是指页面上的某一部分,当创建一个大型的项目时,项目可以被分为很多组件,维护时就变的简单多了。
2.Vue组件分为全局组件和局部组件,局部组件需在实例中声明(注册)。
全局组件声明简例:
Vue.component('todo-item',{
template:'<li>item</li>'
})
局部组件声明简例:
//声明一个变量等于一个对象,对象里面给一个模板
var TodoItem={
template:'<li>item</li>'
}
new Vue({
el:"#root",
components:{
'todo-item':TodoItem
}
//如不在父组件中注册局部组件不可以使用
3.组件与实例的关系:每一个组件都是一个Vue实例,反过来每一个Vue实例也可以称为一个组件,根实例的模板是挂载点里的所有内容
4.Vue组件之间通信方式:父组件通过属性的形式向子组件传值;
<body>
<div id="root">
<input v-model="inputValue">
<button @click="handleSubmit">提交</button>
<ul>
<!-- <li v-for="(item,index) of list" :key="index">{{item}}</li> -->
<todo-item v-for="(item,index) of list" :key="index" :content="item"></todo-item>
</ul>
</div>
<script>
Vue.component('todo-item',{
props:['content'],//props属性值可以是一个数组,用于接收外部属性
template:'<li>{{content}}</li>'//使用插值表达式显示content
})
new Vue({
el:"#root",
data: {
inputValue:'',
list: []
},
methods:{
handleSubmit:function(){
this.list.push(this.inputValue)
this.inputValue=''
}
}
})
</script>
</body>
这段代码实现了一个简单的todolist功能,即在表单中输入内容点击提交显示在无序列表中;
子组件通过发布订阅模式来与父组件通信:emit()方法;
this.$emit('delete',this.index)
handleDelete:function(index){ //声明一个形参用于接收实参
this.list.splice(index,1)
}
这段代码通过emit()方法实现了当点击当前列表项时就将当前列表项删除。