Vue 子组件向父组件传递数据
- 定义子组件模板和子组件
- 定义父组件模板和父组件
- 在父组件中绑定子组件
- 在子组件的
data
中设置categories
键值对数组,在子组件模板中显示v-for
,最后在父组件模板使用 - 在子组件
methods
中自定义btnClick
方法,传入item
,使用$emit
自定义事件传递给父组件,自定义itemclick
作为btnClick(item)
传递出事件的标识 - 定义点击事件
@click="btnClick(item)
,在点击按钮时,调用子组件methods
的btnClick(item)
方法中的 this.$emit('itemclick')
传递给正在监听(下一步定义)的父组件 - 父组件模板使用组件时设置监听
@itemclick="cpnclike"``itemclick
是子组件$emit
发射的标识;cpnclike
是父组件methods
中的方法,用来执行子组件的点击事件 - 定义
cpnclike
方法
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<div id="app">
<cpn @itemclick="cpnclike"></cpn>
</div>
<template id="cpn">
<div>
<button v-for="item in categories"
@click="btnClick(item)">
{{item.name}}
</button>
</div>
</template>
<script type="text/javascript" src="../js/vue.js"></script>
<script>
const cpn={
template: '#cpn',
data(){
return{
categories:[
{id: '1',name: '热门推荐'},
{id: '2',name: '手机数码'},
{id: '3',name: '电脑办公'}
]
}
},
methods:{
btnClick(item){
this.$emit('itemclick',item)
}
}
}
const app = new Vue({
el:'#app',
data: {
message:'hello'
},
components:{
cpn
},
methods: {
cpnclike(item){
console.log('cpnclike',item);
}
}
})
</script>
</body>
</html>