官网的一句话:父子组件的关系可以总结为 props 向下传递,事件方法向上传递。父组件通过 props 给子组件下发数据,子组件通过事件给父组件发送消息。
子组件渲染父组件的数据,在上一篇文章中做了一些解释,这里要说明的是,子组件使用
$emit
触发父组件的自定义事件。
父组件向子组件传递方法,使用的是 事件绑定机制;
v-on:
当我们自定义一个事件属性之后,那么,子组件就能够通过某种方法,来调用传递进去的这个方法了。
$emit语法:
vm.$emit(eventName,args);
参数说明:第一个参数 eventName,表示自己定义事件名称。
第二个参数:表示要传给父组件的参数。
例子:
<!DOCTYPE html><html lang='en'>
<head>
<meta charset='UTF-8'>
<meta name='viewport' content='width=device-width, initial-scale=1.0'>
<meta http-equiv='X-UA-Compatible' content='ie=edge'>
<title></title>
<script src='../lib/vue.js'></script>
</head>
<body>
<div id='app'>
<!-- 父组件向子组件 传递 方法,使用的是 事件绑定机制;v-on ,当我们自定义了一个事件属性之后,那么,子组件就能够,通过某些方法,来调用 传递进去的这个方法了 -->
<com2 @func="show"></com2>
</div>
<template id="tmpl">
<div>
<H1>这是子组件</H1>
<input type="button" value="这是子组件中的按钮-点击它,触发 父组件传递过来func方法" @click="myClick">
</div>
</template>
<script>
// 定义了一个字面量类型的 模板对象
var com2 = {
template: '#tmpl', //通过制定了一个 Id,表示 说,要去加载 这个制定Id的 template 元素中的内容,当做 组件的 HTML 结构
data() {
return {
sonmsg: {
name: '小儿子',
age: 15
}
}
},
methods: {
myClick() {
// 当点击子组件的按钮的时候,如何 拿到 父组件传递过来的 func方法,并调用这个方法?
// emit 英文原意:触发 调用 发射的意思
this.$emit('func', this.sonmsg); //第一个参数是自定义事件的名称,后边这个就是传参
}
},
}
var vm = new Vue({
el: '#app',
data: {
datamsgFromSon: null
},
methods: {
show(data) {
console.log('调用了父组件身上的 show 方法----' )
console.log(data)
this.datamsgFromSon = data; //子组件向父组件传值
}
},
components: {
com2
// 在属性中,上边可以直接解析成这样 com2:com2
}
})
</script>
</body>
</html>
还没有评论,来说两句吧...