vue3 兄弟页面调用方法

2025-03-16 23

vue3 兄弟页面调用方法

在 Vue 3 项目中,兄弟组件(页面)之间进行方法调用是一个常见的需求。要实现这一功能,可以借助Vuex、事件总线或通过父组件中转等方式。其中最推荐使用官方提供的Composition API配合provide/inject的方式或者 Vuex 进行状态管理来解决。

一、使用Vuex实现

  1. 安装vuex
    如果还没有安装Vuex的话,可以通过npm install vuex@next --save命令安装。
  2. 创建store
javascript
// store/index.js
import { createStore } from 'vuex'</p>

<p>export default createStore({
  state: {
    message:''
  },
  mutations: {
    setMessage(state, payload){
      state.message = payload;
    }
  },
  actions: {
    sendMessage({commit},payload){
      commit('setMessage',payload);
    }
  }
})
  1. 在发送消息的兄弟页面定义方法并调用action
javascript

  <div>
    <!-- 点击按钮后触发sendMessage -->
    <button>给兄弟发消息</button>
  </div>
</p>


import { useStore } from 'vuex';
export default {
  setup(){
    const store = useStore();
    const sendMessage = ()=>{
      store.dispatch('sendMessage','你好啊');
    }
    return{
      sendMessage
    }
  }
}


<p>
  1. 在接收消息的兄弟页面监听state的变化
javascript

  <div>
    {{message}}
  </div>
</p>


import {computed} from 'vue';
import {useStore} from 'vuex';
export default {
  setup(){
    const store = useStore();
    const message = computed(()=>store.state.message);
    return{
      message
    }
  }
}


<p>

二、通过父组件中转

  1. 父组件定义方法和子组件传值相关逻辑
html
<!-- ParentComponent.vue -->

  
  
</p>


import ChildOne from './ChildOne.vue';
import ChildTwo from './ChildTwo.vue';
export default {
  components:{
    ChildOne,
    ChildTwo
  },
  methods:{
    handleSendMsg(msg){
      this.$refs.childTwo.receiveMessage(msg);
    }
  }
}


<p>
  1. 发送消息的兄弟页面(ChildOne.vue)
html

  <div>
    <button>给兄弟发消息</button>
  </div>
</p>


export default {
  methods:{
    sendMessage(){
      this.$emit('sendMsgToBrother','来自哥哥的消息');
    }
  }
}


<p>
  1. 接收消息的兄弟页面(ChildTwo.vue)
html

  <div>
    {{message}}
  </div>
</p>


export default {
  data(){
    return{
      message:''
    }
  },
  methods:{
    receiveMessage(msg){
      this.message = msg;
    }
  }
}


<p>

以上两种方式都可以很好地实现Vue3兄弟页面之间的方法调用,在实际开发中可以根据项目的需求和复杂程度选择合适的方式。

Image

1. 本站所有资源来源于用户上传和网络,因此不包含技术服务请大家谅解!如有侵权请邮件联系客服!cheeksyu@vip.qq.com
2. 本站不保证所提供下载的资源的准确性、安全性和完整性,资源仅供下载学习之用!如有链接无法下载、失效或广告,请联系客服处理!
3. 您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容资源!如用于商业或者非法用途,与本站无关,一切后果请用户自负!
4. 如果您也有好的资源或教程,您可以投稿发布,成功分享后有积分奖励和额外收入!
5.严禁将资源用于任何违法犯罪行为,不得违反国家法律,否则责任自负,一切法律责任与本站无关

源码下载