Vue3父子组件通信

一、Vue3父子组件通信v-model

在Vue3中,v-model不再是语法糖,而是一个API。v-model指令等价于将value prop和input事件绑定到组件上。通过在组件内部添加model选项,让组件支持v-model。

//子组件
<template>
  <input :value="value" @input="$emit('input', $event.target.value)" />
</template>

<script>
export default {
  props: {
    value: String
  },
  model: {
    prop: 'value',
    event: 'input'
  }
}
</script>

//父组件
<template>
  <child-component v-model="message" />
</template>

<script>
import ChildComponent from './ChildComponent.vue'
export default {
  components: {
    ChildComponent
  },
  data() {
    return {
      message: ''
    }
  }
}
</script>

二、Vue3父子组件通信子组件如何接收

Vue3中的父子组件通信,仍然可以使用props互相通信。子组件需要通过props接收从父组件传来的数据。在Vue3中,为了避免props的类型错误和必需性问题,可以使用标签中的属性validation选项,进行数据验证。

//子组件
<template>
  <p>{{ message }}</p>
</template>

<script>
export default {
  props: {
    message: {
      type: String,
      required: true
    }
  }
}
</script>

//父组件
<template>
  <child-component :message="parentMessage" />
</template>

<script>
import ChildComponent from './ChildComponent.vue'
export default {
  components: {
    ChildComponent
  },
  data() {
    return {
      parentMessage: 'Hello, child component!'
    }
  }
}
</script>

三、Vue3父子组件方法调用

Vue3中,父组件可以通过$refs或$children属性来调用子组件中的方法。方法需要在子组件中暴露出来,以便父组件可以访问到。

//子组件
<template>
  <p>{{ message }}</p>
</template>

<script>
export default {
  props: {
    message: {
      type: String,
      required: true
    }
  },
  methods: {
    greet() {
      console.log('Hello from the child component!');
    }
  }
}
</script>

//父组件
<template>
  <child-component ref="child" :message="parentMessage" />
</template>

<script>
import ChildComponent from './ChildComponent.vue'
export default {
  components: {
    ChildComponent
  },
  data() {
    return {
      parentMessage: 'Hello, child component!'
    }
  },
  mounted() {
    this.$refs.child.greet();
  }
}
</script>

四、Vue父子组件通信规则

在Vue中,组件的通信遵循一定的规则。

  • 父组件可以向子组件传递props
  • 子组件可以向父组件触发事件
  • 父组件可以通过$refs或$children属性操作子组件
  • 兄弟组件之间需要通过共同的父组件传递props或触发事件进行通信

五、Vue3父子组件双向绑定

除了v-model,Vue3组件中也可以使用自定义事件以及prop的形式来实现双向绑定。

//子组件
<template>
  <input :value="message" @input="handleChange" />
</template>

<script>
export default {
  props: {
    message: String
  },
  methods: {
    handleChange(event) {
      this.$emit('update:message', event.target.value);
    }
  }
}
</script>

//父组件
<template>
  <child-component :message="message" @update:message="handleMessageUpdate" />
</template>

<script>
import ChildComponent from './ChildComponent.vue'
export default {
  components: {
    ChildComponent
  },
  data() {
    return {
      message: ''
    }
  },
  methods: {
    handleMessageUpdate(value) {
      this.message = value;
    }
  }
}
</script>

六、Vue2父子组件通信

在Vue2中,父子组件通信仍然可以使用props和$emit来实现。

//子组件
<template>
  <button @click="handleClick">{{ buttonText }}</button>
</template>

<script>
export default {
  props: {
    buttonText: String
  },
  methods: {
    handleClick() {
      this.$emit('button-click');
    }
  }
}
</script>

//父组件
<template>
  <child-component :buttonText="buttonText" @button-click="handleButtonClick" />
</template>

<script>
import ChildComponent from './ChildComponent.vue'
export default {
  components: {
    ChildComponent
  },
  data() {
    return {
      buttonText: 'Click me!'
    }
  },
  methods: {
    handleButtonClick() {
      console.log('Button clicked!');
    }
  }
}
</script>

七、父子组件通信Vue

在Vue中,父子组件通信是Vue应用中十分常见的情况。

//子组件
<template>
  <p>{{ message }}</p>
</template>

<script>
export default {
  props: {
    message: String
  }
}
</script>

//父组件
<template>
  <child-component message="Hello, child component!" />
</template>

<script>
import ChildComponent from './ChildComponent.vue'
export default {
  components: {
    ChildComponent
  }
}
</script>

八、Vue子传父组件通信

在Vue中,子组件可以向父组件传递消息,使用$emit触发事件从子组件向父组件传递数据。

//子组件
<template>
  <button @click="handleClick">{{ buttonText }}</button>
</template>

<script>
export default {
  props: {
    buttonText: String
  },
  methods: {
    handleClick() {
      this.$emit('button-click', 'Child component says hello!');
    }
  }
}
</script>

//父组件
<template>
  <child-component :buttonText="buttonText" @button-click="handleButtonClick" />
</template>

<script>
import ChildComponent from './ChildComponent.vue'
export default {
  components: {
    ChildComponent
  },
  data() {
    return {
      buttonText: 'Click me!'
    }
  },
  methods: {
    handleButtonClick(message) {
      console.log(message);
    }
  }
}
</script>

九、Vue父子组件生命周期顺序

Vue中,组件的生命周期函数在父子组件之间有着不同的顺序。

//子组件
<template>
  <p>{{ message }}</p>
</template>

<script>
export default {
  props: {
    message: String
  },
  beforeCreate() {
    console.log('Child component: beforeCreate()');
  },
  created() {
    console.log('Child component: created()');
  },
  beforeMount() {
    console.log('Child component: beforeMount()');
  },
  mounted() {
    console.log('Child component: mounted()');
  },
  beforeUpdate() {
    console.log('Child component: beforeUpdate()');
  },
  updated() {
    console.log('Child component: updated()');
  },
  beforeUnmount() {
    console.log('Child component: beforeUnmount()');
  },
  unmounted() {
    console.log('Child component: unmounted()');
  }
}
</script>

//父组件
<template>
  <child-component message="Hello, child component!" />
</template>

<script>
import ChildComponent from './ChildComponent.vue'
export default {
  components: {
    ChildComponent
  },
  beforeCreate() {
    console.log('Parent component: beforeCreate()');
  },
  created() {
    console.log('Parent component: created()');
  },
  beforeMount() {
    console.log('Parent component: beforeMount()');
  },
  mounted() {
    console.log('Parent component: mounted()');
  },
  beforeUpdate() {
    console.log('Parent component: beforeUpdate()');
  },
  updated() {
    console.log('Parent component: updated()');
  },
  beforeUnmount() {
    console.log('Parent component: beforeUnmount()');
  },
  unmounted() {
    console.log('Parent component: unmounted()');
  }
}
</script>

以上是Vue3父子组件通信的一些细节,希望对大家有所帮助。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/153973.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-11-15 03:24
下一篇 2024-11-15 03:24

相关推荐

  • 如何修改ant组件的动效为中心

    当我们使用Ant Design时,其默认的组件动效可能不一定符合我们的需求,这时我们需要修改Ant Design组件动效,使其更加符合我们的UI设计。本文将从多个方面详细阐述如何修…

    编程 2025-04-29
  • Ant Design组件的动效

    Ant Design是一个基于React技术栈的UI组件库,其中动效是该组件库中的一个重要特性之一。动效的使用可以让用户更清晰、更直观地了解到UI交互的状态变化,从而提高用户的满意…

    编程 2025-04-29
  • 跨域通信浮标——实现客户端之间的跨域通信

    本文将介绍跨域通信浮标的使用方法,该浮标可以实现客户端之间的跨域通信,解决了浏览器同源策略的限制,让开发者能够更加方便地进行跨域通信。 一、浮标的原理 跨域通信浮标的原理是基于浮动…

    编程 2025-04-27
  • 通信专业Python和Java的开发技巧

    本文旨在介绍通信专业Python和Java的开发技巧,为读者提供实用且可操作的思路和方法。 一、Python在通信领域中的应用 Python是一种优秀的程序设计语言,因其易学易用、…

    编程 2025-04-27
  • 用mdjs打造高效可复用的Web组件

    本文介绍了一个全能的编程开发工程师如何使用mdjs来打造高效可复用的Web组件。我们将会从多个方面对mdjs做详细的阐述,让您轻松学习并掌握mdjs的使用。 一、mdjs简介 md…

    编程 2025-04-27
  • Spring MVC主要组件

    Spring MVC是一个基于Java语言的Web框架,是Spring Framework的一部分。它提供了用于构建Web应用程序的基本架构,通过与其他Spring框架组件集成,使…

    编程 2025-04-27
  • Mescroll.js——移动端下拉刷新和上拉加载更多组件

    一、概述 Mescroll.js是一款移动端的下拉刷新和上拉加载更多组件,因其简单易用和功能强大而深受开发者的喜爱。Mescroll.js可以应用于各种移动端网站和APP,能够支持…

    编程 2025-04-25
  • Vue强制重新渲染组件详解

    一、Vue强制重新渲染组件是什么? Vue中的强制重新渲染组件指的是,当我们需要重新渲染组件,但是组件上的数据又没有改变时,我们可以使用强制重新渲染的方式来触发组件重新渲染。这种方…

    编程 2025-04-25
  • Vue封装公共组件的最佳实践

    一、封装公共组件的意义 随着前端技术的不断发展,Web应用程序变得越来越复杂。为了更好地管理和维护代码,我们通常需要编写可重用的组件,而这些组件往往是我们所写的多个项目都需要用到的…

    编程 2025-04-25
  • ROS通信

    一、概述 ROS是机器人操作系统,是一个开源的、灵活的、分布式的软件平台,可以帮助我们快速开发机器人应用程序。ROS中的通信是机器人应用程序开发中最重要的部分之一,它是实现多模块协…

    编程 2025-04-25

发表回复

登录后才能评论