【Vue】组件之间的方法调用

组件之间的方法调用包括:

  • 子组件调用父组件的方法
  • 父组件调用子组件的方法
  • 无关联组件之间的方法调用

下面来详细学习三种组件之间的方法调用。

子组件调用父组件的方法

子组件调用父组件时需要先访问父组件实例,Vue.js中提供了$parent property 供子组件访问父组件的实例。
$parent是指组件树的根实例,如果组件没有根实例则表示它自己。
通过$parent既可以方法父组件的方法和属性,又可以修改父组件的方法和属性。
用法:
假设父组件中有属性name和方法parentPrint,在子组件中调用如下:

//获取父组件name值
console.log(this.$parent.name);
//修改父组件name值
this.$parent.name ="ssss";
this.$parent.parentPrint();

如果子组件被父组件嵌套调用,子组件如果想要访问最外层的父组件的实例,则需要多个this.$parent.$parent...$parent直到访问到最外层的父组件,这种调用方式容易出现问题,因此不常使用。

父组件调用子组件的方法

在父组件中如果想要访问子组件的实例,可以在父组件中通过ref为子组件创建一个id引用
在父组件中调用子组件:

<base-input ref="usernameInput"></base-input>

调用子组件的方法:

this.$refs.usernameInput.方法();

但是$refs只会在组件渲染完成之后生效,并且它们不是响应式的。这仅作为一个用于直接操作子组件的“逃生舱”——你应该避免在模板或计算属性中访问 $refs

父组件向子组件传递数据
在子组件中通过props定义数据类型,父组件调用子组件时通过v-bind(或:)将数据绑定传递给子组件
子组件修改父组件的属性
子组件修改父组件的属性,可以通过以下更新父组件的属性

this.$emit('update:parentProp',prop)

Vue通过prop进行双向数据绑定。子组件数据变化,一般只能通过 this.$emit(func, val) 回调父组件函数来传值给父组件。
Vue2.3版本引入sync,作为一个事件绑定语法糖,当子组件触发事件时,父组件会响应事件并实现数据更新。
父组件:

 <parent-comp :visible.sync="isShow"></parent-comp>

子组件:

props: {
    visible: {
      type: Boolean,
      default: false
    }
  },
  methods: {
    // 子组件触发函数
    handleClose() {
      this.$emit('update:visible', false)
    },
  }
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Vue中,组件可以通过事件的方式调用组件方法。具体步骤如下: 1. 在父组件中定义一个方法。 2. 在组件中触发一个事件,并将需要传递给父组件的数据作为参数。 3. 在父组件中监听组件触发的事件,并在事件处理函数中调用相应的方法。 下面是一个示例: 父组件: ```html <template> <div> <button @click="callParentMethod">调用组件方法</button> </div> </template> <script> export default { methods: { parentMethod() { console.log("这是父组件方法"); }, callParentMethod() { // 组件触发事件,传递数据 this.$emit("child-event", "这是组件传递给父组件的数据"); }, }, }; </script> ``` 组件: ```html <template> <div> <button @click="callParentMethod">调用组件方法</button> </div> </template> <script> export default { methods: { callParentMethod() { // 触发事件,传递数据给父组件 this.$emit("child-event", "这是组件传递给父组件的数据"); }, }, }; </script> ``` 在父组件中监听组件触发的事件,并调用相应的方法: ```html <template> <div> <child-component @child-event="parentMethod"></child-component> </div> </template> <script> import ChildComponent from "./ChildComponent.vue"; export default { components: { ChildComponent, }, methods: { parentMethod(data) { console.log("接收到组件传递的数据:", data); // 调用组件方法 console.log("这是父组件方法"); }, }, }; </script> ``` 这样,当组件中的按钮被点击时,会触发事件并将数据传递给父组件,父组件监听到事件后会调用相应的方法

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木笔の园子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值