第一种方法是直接在子组件中通过this.$parent.event来调用父组件的方法
父组件
vue 里 this.$parent 作用
$parent在子组件中调用父组件的方法或获得其数据
this.$parent 可以访问到父组件上所有的 data(){ 里的数据信息和生命周期方法,methods里的方法 }
如 this.$parent.List = []; 表示访问到父组件中data的数据list数组
区分
1、ref为子组件指定一个索引名称,通过索引来操作子组件;
2、this.$parent 可以直接访问该组件的父实例或组件;
3、父组件也可以通过this.$children 访问它所有的子组件,
$parent和$children 可以递归向上或向下无线访问, 直到根实例或最内层的组件。
<template> <div> <child></child> </div> </template> <script> import child from '~/components/dam/child'; export default { components: { child }, methods: { fatherMethod() { console.log('测试'); } } }; </script>
子组件
<template> <div> <button @click="childMethod()">点击</button> </div> </template> <script> export default { methods: { childMethod() { this.$parent.fatherMethod(); } } }; </script>
第二种方法是在子组件里用$emit
向父组件触发一个事件,父组件监听这个事件就行了。(传参)
父组件
作用 子组件可以使用 $emit 触发父组件的自定义事件。 语法 vm.$emit( event, arg ) //触发父级实例上的事件
对于vue.js中的this.emit的理解:
举例 : this.emit(‘increment1’,”加参数”);
其实它的作用就是触发自定义函数。此外,可以子组件传参数给父组件
综述,即子组件调用父组件的方法并传递数据
具体应用如下
<template> <div> <child @fatherMethod="fatherMethod"></child> </div> </template> <script> import child from '~/components/dam/child'; export default { components: { child }, methods: { fatherMethod() { console.log('测试'); } } }; </script>
子组件
<template> <div> <button @click="childMethod()">点击</button> </div> </template> <script> export default { methods: { childMethod() { this.$emit('fatherMethod'); } } }; </script>
第三种是父组件把方法传入子组件中,在子组件里直接调用这个方法
父组件
<template> <div> <child :fatherMethod="fatherMethod"></child> </div> </template> <script> import child from '~/components/dam/child'; export default { components: { child }, methods: { fatherMethod() { console.log('测试'); } } }; </script>
子组件
<template> <div> <button @click="childMethod()">点击</button> </div> </template> <script> export default { props: { fatherMethod: { type: Function, default: null } }, methods: { childMethod() { if (this.fatherMethod) { this.fatherMethod(); } } } }; </script>