Vue中,默认子组件无法直接取得父组件中的数据!所以才需要进行传值操作!
<body> <div id=‘app‘> <com2 @funclick="show"></com2> <!--绑定事件funclick到子组件,调用父组件的show方法--> </div> </body> <script> let vm = new Vue({ el: ‘#app‘, data: { parentInfo: ‘这是父组件-vm实例的讯息‘, //给子组件传递文本 obj: { name: ‘jc‘, age: 188 }, }, methods: { show(a) { console.log(‘调用show,输出‘ + a); } }, filters: {}, components: { ‘com1‘: { template: `<div><h3>这就是子组件h3---这是父组件的消息:{{ pmsg }}</h3><h2>父组件传来的对象---{{ JSON.stringify(pobj) }}</h2></div>`, props: [‘pmsg‘, ‘pobj‘], //vue中,只有这个props/prop 是数组,其他属性都是对象 data: function() { return {} }, methods: {} }, ‘com2‘: { template: `<input type=‘button‘ value=‘点我触发父组件上的show方法‘ @click=‘com2click‘>`, methods: { com2click() { this.$emit(‘funclick‘,{name:‘vue‘}); //触发子组件绑定的funclick这个函数【而funclick引用的是父组件中的show方法】!
//这个传递的第二个参数就会被 父组件中的show方法接收到!
} } } }, }) </script>
上面的父组件向子组件传递函数的时候,固定语法:this.$emit(‘funclick‘); //触发子组件绑定的funclick这个函数【而funclick引用的是父组件中的show方法】!,this.$emit(‘funclick‘,{name:‘vue‘}),这里其实还可以传递第二个参数,第一个参数为绑定事件name,this.$emit() 触发父组件的方法时,第二个参数就会被当作参数传递给被触发的父组件中的那个方法。
show(a) {console.log(‘调用show,输出:‘ + a.name);}=>调用show,输出:vue,这里就可以接到这个第二个参数对象。
变式:其实也可以将子组件要传递的值放到本地存储 localStorage中,这样父组件中也已通过去本地存储中拿数据,通过一个中转,去传递值数据。
原文:https://www.cnblogs.com/Hijacku/p/14734757.html