vue 子页面怎么调用父页面的方法

本文详细介绍Vue.js中父组件与子组件间的通信方式,包括通过props传递数据、使用$emit触发事件以及利用provide/inject实现跨级组件通信。同时,探讨了如何在子组件中调用父组件的方法,以及父组件如何获取子组件的状态。

父级

<template>
  <div id="app">
    <router-view/>
  </div>
</template>

<script>
export default {
  name: 'App',
  provide(){
      return{
          say:this.say
      }
  },
  methods:{
      say(){
          alert("这是父页面的方法");
      }
  }
}
</script>

<style>
</style>

子级

<template>
    <button @click="recv">点击调用父页面的方法</button>
</template>
<script>
    export default {
        inject:['say'],
        methods:{
         recv(){
             this.say();
         }
        }
    }
    
</script>

第二中方法
直接在子组件中通过this.$parent.event来调用父组件的方法
父级

<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>

父级调用子级

 <left ref="left" @loadmobile="loadmobile" @cancel="cancel"></left>
 this.$refs.left.onSave()

子级调用父级

 子: this.$emit('subtablecent')
 父:  <center  v-on:subtablecent="subtablecent" ></center>
### Vue 组件调用父组件方法的实现方式 在 Vue 中,组件可以通过多种方式调用父组件中的方法。以下是几种常见的实现方式: #### 方式一:通过 `$emit` 和 `@` 绑定事件 组件可以使用 `this.$emit` 来触发一个自定义事件,并将数据作为参数传递给父组件。父组件则通过 `v-on` 或者缩写形式 `@` 来监听该事件并绑定对应的方法。 **组件 (Child.vue):** ```javascript <template> <button @click="sendDataToParent">发送消息</button> </template> <script> export default { methods: { sendDataToParent() { this.$emit('custom-event', '来自组件的数据'); } } }; </script> ``` **父组件 (Parent.vue):** ```html <template> <child-component @custom-event="handleCustomEvent"></child-component> </template> <script> import ChildComponent from './Child.vue'; export default { components: { ChildComponent }, methods: { handleCustomEvent(data) { console.log('接收到组件的消息:', data); // 输出: 接收到组件的消息: 来自组件的数据 } } }; </script> ``` 这种方式利用了 Vue 的事件机制[^1]。 --- #### 方式二:直接访问父组件实例 (`$parent`) 如果父组件之间的关系非常紧密,可以直接通过 `this.$parent` 访问父组件实例及其方法。不过需要注意的是,这种做法耦合度较高,不推荐用于复杂场景。 **组件 (Child.vue):** ```javascript <template> <button @click="callParentMethod">调用父组件方法</button> </template> <script> export default { methods: { callParentMethod() { this.$parent.parentFunction(); // 调用父组件的方法 } } }; </script> ``` **父组件 (Parent.vue):** ```javascript <template> <child></child> </template> <script> import Child from './Child.vue'; export default { components: { Child }, methods: { parentFunction() { console.log('父组件方法调用了!'); } } }; </script> ``` 此方式适用于简单的父通信需求[^2]。 --- #### 方式三:通过 Props 传递回调函数 另一种常见的方式是让父组件将自身的某个方法作为 Prop 传递给组件。这样,组件就可以像执行本地方法一样调用这个回调函数。 **父组件 (Parent.vue):** ```html <template> <child :callback-function="parentCallback"></child> </template> <script> import Child from './Child.vue'; export default { components: { Child }, methods: { parentCallback(message) { console.log('父组件接收到来自组件的信息:', message); } } }; </script> ``` **组件 (Child.vue):** ```javascript <template> <button @click="invokeCallback">调用父组件方法</button> </template> <script> export default { props: ['callbackFunction'], methods: { invokeCallback() { this.callbackFunction('这是组件发来的信息'); // 执行父组件传递过来的回调函数 } } }; </script> ``` 这种方法的优点在于清晰地表达了父间的依赖关系[^3]。 --- ### 总结 以上介绍了三种主要的 Vue 组件调用父组件方法的技术手段: - **基于事件驱动模型 ($emit)** 是最常用也是官方推荐的做法; - **直接操作 $parent 对象** 可以快速解决问题但会增加代码维护难度; - **借助 Props 提供回调接口** 则更加灵活且易于理解。 每种方案都有其适用范围,在实际开发过程中应根据具体业务逻辑选择合适的策略。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值