第一種方法是直接在子組件中通過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>