组件间传值 props 和 $emit
<template>
<div>
<Input @add="addHandler"/>
<List :list="list" @delete="deleteHandler"/>
</div>
</template>
<script>
import Input from './Input'
import List from './List'
export default {
components: {
Input,
List
},
data() {
return {
list: [
{
id: 'id-1',
title: '标题1'
},
{
id: 'id-2',
title: '标题2'
}
]
}
},
methods: {
addHandler(title) {
this.list.push({
id: `id-${Date.now()}`,
title
})
},
deleteHandler(id) {
this.list = this.list.filter(item => item.id !== id)
}
},
created() {
console.log('index created')
},
mounted() {
console.log('index mounted')
},
beforeUpdate() {
console.log('index before update')
},
updated() {
console.log('index updated')
},
}
</script>
<template>
<div>
<ul>
<li v-for="item in list" :key="item.id">
{{item.title}}
<button @click="deleteItem(item.id)">删除</button>
</li>
</ul>
</div>
</template>
<script>
import event from './event'
export default {
props: {
list: {
type: Array,
default() {
return []
}
}
},
data() {
return {
}
},
methods: {
deleteItem(id) {
this.$emit('delete', id)
},
addTitleHandler(title) {
console.log('on add title', title)
}
},
created() {
console.log('list created')
},
mounted() {
console.log('list mounted')
event.$on('onAddTitle', this.addTitleHandler)
},
beforeUpdate() {
console.log('list before update')
},
updated() {
console.log('list updated')
},
beforeDestroy() {
event.$off('onAddTitle', this.addTitleHandler)
}
}
</script>
自定义事件传值 组件间通讯-自定义事件
import Vue from 'vue'
export default new Vue()
<template>
<div>
<input type="text" v-model="title"/>
<button @click="addTitle">add</button>
</div>
</template>
<script>
import event from './event'
export default {
data() {
return {
title: ''
}
},
methods: {
addTitle() {
this.$emit('add', this.title)
event.$emit('onAddTitle', this.title)
this.title = ''
}
}
}
</script>
组件生命周期
- 创建
created
- 渲染
mounted
- 销毁
beforeDestory