子组件给父组件传值
子组件向父组件传值基本用法
props
传递数据原则:单向数据流
要向从子组件中向父组件传值,需要进行两个步骤:
-
① 子组件通过自定义事件向父组件传递信息
Vue.component('small-item', { data: function() { return { msg: '子组件的值' } }, template: ` <div><button @click="$emit('enlarge-text')">增大父组件里的文字字号</button></div> ` });
点击按钮之后,触发
$emit()
方法,此方法用于触发自定义事件 -
② 父组件监听子组件的事件
<div id="app"> <div :style="{fontSize: fontsize + 'px'}">{{pmsg}}</div> <small-item @enlarge-text="handle"></small-item> </div>
var vm = new Vue({ el: '#app', data: { pmsg: '父组件的值', fontsize: 12 }, methods: { handle: function() { this.fontsize += 5; } } });
-
完整代码
<!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> </head> <body> <div id="app"> <div :style="{fontSize: fontsize + 'px'}">{{pmsg}}</div> <small-item @enlarge-text="handle"></small-item> </div> <script src="js/vue.js "></script> <script> Vue.component('small-item', { data: function() { return { msg: '子组件的值' } }, template: ` <div><button @click="$emit( 'enlarge-text') ">增大父组件里的文字字号</button></div> ` }); var vm = new Vue({ el: '#app', data: { pmsg: '父组件的值', fontsize: 12 }, methods: { handle: function() { this.fontsize += 5; } } }); </script> </body> </html>
子组件向父组件传值(带参数)
基于上述案例,对某些地方做改变
Vue.component('small-item', {
data: function() {
return {
msg: '子组件的值'
}
},
template: `
<div><button @click="$emit('enlarge-text', 5)">增大父组件里的文字字号</button></div>
`
});
在 $emit()
方法里传递一个 5
<div id="app">
<div :style="{fontSize: fontsize + 'px'}">{{pmsg}}</div>
<small-item @enlarge-text="handle($event)"></small-item>
</div>
通过 $event
获取传递的值
var vm = new Vue({
el: '#app',
data: {
pmsg: '父组件的值',
fontsize: 12
},
methods: {
handle: function(val) {
this.fontsize += val;
}
}
});
添加 val
参数