首页 > 其他分享 >Vue前端开发子组件向父组件传参

Vue前端开发子组件向父组件传参

时间:2024-11-20 11:43:40浏览次数:3  
标签:传参 Vue 自定义 向父 事件 Child 组件

在父组件中,如果需要获取子组件中的数据,有两种方式,一种是在子组件中自定义事件,父组件绑定该事件,当触发自定义事件时,向父组件传入参数;另一种是先通过ref属性给子组件命名,然后在父组件中就可以调用$refs对象,访问命名的子组件中数据。

子组件自定义事件传参

父组件通过绑定子组件中自定义的事件,在触发的事件中,获取传入的数据,这种方式是子组件向父组件传参的重要方式,接下来通过一个实例来演示它实现的过程。

实例7-2 子向父组件传参

1. 功能描述

在实例7-1的基础之上,向子组件的视图中添加一个“长度”按钮,当点击该按钮时,获取父组件传入数据的长度,并通过自定义的事件,将该长度值传递给父组件,父组件接收该值后,显示在页面中。

2. 实现代码

在项目的components 文件夹中,添加一个名为“Parent”的.vue文件,该文件的保存路径是“components/ch7/part2/”,在文件中加入如清单7-3所示代码。

代码清单7-3 Parent.vue代码

<template>
    <div class="iframe">
        <div class="i-left">
            <span>父组件:</span>
            <input v-model="name" placeholder="请输入用户名" />
        </div>
        <div class="i-right">
            {{ len }}
        </div>
    </div>
    <!-- 在父组件中调用子组件 -->
    <Child :inputName="name" @getLength="onGetLength" />
</template>
<script>
import Child from "./Child.vue"
export default {
    data() {
        return {
            name: "",
            len: 0
        }
    },
    components: {
        Child
    },
    methods: {
        onGetLength(data) {
            this.len = data
        }
    }
}
</script>
<style>
.iframe {
    width: 300px;
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding: 8px;
    border: solid 1px #ccc;
}

.i-left {
    display: flex;
    align-items: center;
}

.iframe input {
    padding: 8px;
}

.iframe:last-child {
    border-top: none;
    padding: 16px 8px;
    background-color: #eee;
}
</style>

在父组件中,导入并注册了一个名称为Child的子组件,它的功能是通过自定义的事件向父组件传递数据,并将该数据显示在视图模块中,它的代码如清单7-4所示。

代码清单7-4 Child.vue代码

<template>
    <div class="iframe">
        <div class="i-left">
            <span>子组件:</span>
            <span>{{ inputName }}</span>
        </div>
        <div class="i-right">
            <button @click="onGetLength">长度</button>
        </div>
    </div>
</template>
<script>
export default {
    props: {
        inputName: {
            type: String,
            required: true
        }
    },
    emits: ["getLength"],
    methods: {
        onGetLength() {
            this.$emit("getLength", this.inputName.length)
        }
    }
}
</script>

3. 页面效果

保存代码后,页面在Chrome浏览器下执行的页面效果如图7-3所示。
在这里插入图片描述

4. 源码分析

在子组件Child的源码中,为了能向父组件传递参数,先在“emits”选项中定义一个名为“getLength”的事件,当点击“长度”按钮时,执行该事件,同时,将inputName数据的长度值作为事件携带的参数。

在父组件Parent的源码中,为了能接收到子组件传入的参数,则在调用子组件时,绑定自定义的“getLength”事件,并在事件执行时,获取携带的参数值,并将该值作为变量,绑定到视图的元素中,从而最终实现子组件向父组件传参的过程。

需要说明的是:自定义事件携带的参数可以是一个变量,也可以是一个对象,如果需要传递多项数据,则可以借助对象的形式向父组件传递。
在这里插入图片描述

标签:传参,Vue,自定义,向父,事件,Child,组件
From: https://blog.csdn.net/chuanshixx/article/details/143903987

相关文章

  • 【前端Vue】 day01
    一、为什么要学习Vue1.前端必备技能2.岗位多,绝大互联网公司都在使用Vue3.提高开发效率4.高薪必备技能(Vue2+Vue3)二、什么是Vue概念:Vue(读音/vjuː/,类似于view)是一套**构建用户界面**的渐进式框架Vue2官网:https://v2.cn.vuejs.org/1.什么是构建用户界面基......
  • Unity新导航系统---NavMeshObstacle组件
    系列文章目录Unity新导航系统—NavMeshObstacle组件文章目录系列文章目录前言NavMeshObstacle组件前言NavMeshObstacle组件:用于在场景中定义动态障碍物,来影响导航主体(NavMeshAgent)的路径选择。这是我的学习笔记,记载的是NavMeshObstacle组件的用法和各......
  • 前端两大利器:Vue与TypeScript的渊源
    Vue在前端领域占据着重要地位,是最受欢迎的前端框架之一。它被广泛应用于各种类型的Web应用开发,从简单的小型项目,如个人博客、公司宣传网站等,到复杂的大型企业级应用,如电商平台、金融系统等。例如,许多电商公司使用Vue来构建商品展示、购物车、用户订单管理等功能模块,为......
  • Vue.js组件开发指南
    Vue.js组件开发涵盖多方面内容。从基础层面看,组件作为可复用的Vue实例,能通过多种方式注册,其props用于接收外部数据、data需为函数以保障数据独立。生命周期的各个钩子函数在组件不同阶段发挥作用。组件通信包括父子间的特定方式和非父子间利用事件总线。样式方面有作用域样......
  • React 组件中 State 的定义、使用及正确更新方式
    ​......
  • 尤雨溪都在推荐的Naive UI,Vue组件库的新选择,好用到爆!
    大家好,欢迎来到程序视点!我是小二哥!今天给大家推荐一个完全使用TypeScript编写的Vue3组件库:NaiveUI  Vue作者尤雨溪官方推荐。不可小觑!  关于NaiveUINaiveUI是一款基于当前比较新的Vue3.0/TypeScript技术栈开发的前端......
  • 前端框架Vue3基础部分
    什么是Vue?Vue是一个能用于构建用户交互页面(动态网页)的渐进式JavaScript框架,易学易用,性能出色,适用性强的Web前端框架。Vue的设计模式?Vue的设计模式:MVVM模式MVVM设计模式是不让Model和View这两层直接通信,而是通过VM层来连接。文本插值表达式:可以使用{{}}在模版中插入数据......
  • 【源码+文档】基于SpringBoot + Vue的免税商品优选购物商城系统
    ......
  • 【源码+文档】基于SpringBoot + Vue的学生心理咨询评估系统
    ......
  • 2024-11-18--vue
    vue常用指令vue生命周期vue案例......