Vue 组件通信例子

Vue 组件通信例子使用两个组件 一个组件 ActiveUser 显示姓名和年龄 另一个组件 UserData 可以修改这两项 如图所示 工程里总共 4 个文件 main js import createApp from vue importAppfro App vue importActive components ActiveUser vue importUserDa components UserData vue const

使用两个组件, 一个组件ActiveUser显示姓名和年龄,另一个组件 UserData 可以修改这两项,如图所示:
在这里插入图片描述

  1. main.js:
import { 
    createApp } from "vue"; import App from "./App.vue"; import ActiveUser from "./components/ActiveUser.vue"; import UserData from "./components/UserData.vue"; const app = createApp(App); // 注册组件 app.component("active-user", ActiveUser); app.component("user-data", UserData); app.mount("#app"); 
  1. App.vue 为最上层组件,这里在 UserData 组件上监听 UserData 发出的事件 set-data
<template> <div id="app"> <active-user :user-name="user.name" :user-age="user.age"> </active-user> <user-data @set-data="setUserData"></user-data> </div> </template> <script> export default { 
    data() { 
    return { 
    user: { 
    name: "anonymous", age: 0, } } }, methods: { 
    setUserData(name, age) { 
    // 使用符号 + 将String类型转换为Number  this.user = { 
    name, age: +age, }; }, }, } </script> <style>
html { 
    font-family: sans-serif; } section { 
    margin: 2rem auto; max-width: 30rem; border: 1px solid #ccc; padding:1rem; box-shadow: 5px 5px 5px -5px grey; } form { 
    display:flex; flex-direction: column; justify-content: center; align-items: left; } input,button { 
    width:20rem; margin-bottom: 1rem; padding: 0.5rem; font-size: 1rem; } button { 
    width:10rem; border: none; background: purple; color:white; } </style> 
  1. ActiveUser.vue:
<template> <section> <h2>Name: { 
   { 
   userName}} </h2> <h3>Age: { 
   { 
   userAge}} Years</h3> </section> </template> <script> export default { 
    props: { 
    userName: { 
    type: String, required: true, }, userAge: { 
    type: Number, required: true, } }, } </script> 
  1. UserData.vue, v-model实现双向绑定。
<template> <section> <form @submit.prevent="submitData"> <input type="text" placeholder="Your name" v-model="enteredName"> <input type="text" placeholder="Your age" v-model="enteredAge" > <button>Set User Data</button> </form> </section> </template> <script> export default { 
    emits: ['set-data'], data() { 
    return { 
    enteredName: "", enteredAge: "", } }, methods: { 
    submitData() { 
    this.$emit("set-data", this.enteredName, this.enteredAge); } } } </script> 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/220603.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午8:05
下一篇 2026年3月17日 下午8:05


相关推荐

  • HTML网页设计:十一、表单

    HTML网页设计:十一、表单表单 1 表单 2 表单应用 3 表单的初级验证

    2025年10月30日
    6
  • 嵌入式Linux开发流程_嵌入式开发一般采用什么方式

    嵌入式Linux开发流程_嵌入式开发一般采用什么方式在学习嵌入式开发的过程中,尤其是开始入门时,包括各种各样的教程,都是在讲学习linux,很少讲如何利用linux来开发属于自己的嵌入式项目,也就是没有一个全局的概念,简单理解,大概流程如下:一、建立开发环境   操作系统当然是LInux,或者在win系统下安装虚拟机,通过网络下载相应的GCC交叉编译器进行安装,或者安装产品厂家提供的交叉编译器。  这一步,就相当于在win系统下,要

    2025年7月17日
    7
  • apt-get 出现的 GPG error 问题[通俗易懂]

    apt-get 出现的 GPG error 问题[通俗易懂]在本本装上Debian后,用apt-getupdate更新软件源时,出现以下warning:GPGerror:http://debian.linux.org.twetchRelease:由于没有公钥,下列签名无法进行验证:NO_PUBKEY07DC563D1F41B907解决方案:首先,确保已经安装了以下程序#apt-getinstallgnupg然后,手动导入所需公钥#gpg

    2022年10月12日
    4
  • redisson读写锁使用场景_Redisson酒店

    redisson读写锁使用场景_Redisson酒店读写锁一次只有一个线程可以占有写模式的读写锁,但是可以有多个线程同时占有读模式的读写锁.正是因为这个特性,当读写锁是写加锁状态时,在这个锁被解锁之前,所有试图对这个锁加锁的线程都会被阻塞.当读写锁在读加锁状态时,所有试图以读模式对它进行加锁的线程都可以得到访问权,但是如果线程希望以写模式对此锁进行加锁,它必须直到所有的线程释放锁.通常,当读写锁处于读模式锁住状态时,如果有另外线程试图以写模式加锁,读写锁通常会阻塞随后的读模式锁请求,这样可以避免读模式锁长期占用,而等待的写模式

    2022年8月12日
    8
  • pycharm虚拟环境的解释器设置_pycharm虚拟环境

    pycharm虚拟环境的解释器设置_pycharm虚拟环境什么是Pycharm中的虚拟环境 假如想要在Pycharm中建立两个项目,并且这两个项目需要用到同一个第三方库的不同版本,如果这两个项目共享一个运行环境,那么此时就会发生版本冲突问题。为了解决这个问题,Pycharm提供了Virtualenv(即,虚拟环境)。Virtualenv可以创建一套独立运行的Python环境,从而做到不同项目之间的隔离。当需要安装该环境所需要的包时,在设置—项目—…

    2025年6月28日
    6
  • php 闭包使用场景,闭包应用场景有哪些

    php 闭包使用场景,闭包应用场景有哪些闭包应用场景有 1 采用函数引用方式的 setTimeout 调用 2 小范围代替全局变量 3 有权访问私有变量和私有函数的公有方法 函数外部无法访问函数内部的局部变量 但函数内部的函数可以访问本函数内的局部变量 故通过闭包实现函数外部访问函数内部局部变量 但容易造成内存泄漏 应当谨慎使用 闭包的使用场景 1 采用函数引用方式的 setTimeout 调用 setTimeout 的第一个参数一般是一个即将要

    2026年3月17日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号