Vue 组件传参 prop/emit

news2024/7/11 10:30:43
学习了组件用法,就像一种嵌套引用关系,在这个关系中,经常会涉及相互传数据的需求,即父组件传子组件,子组件传父组件。
父、子组件的关系可以总结为: prop 向下传递(父传子), emit 事件向上传递(子传父),如下图所示:

App.vue它是一个父组件,然后Test和HelloWord,这两个其实就是子组件。这里就是将父组件msg的值传递给了子组件。

<HelloWorld msg="Welcome to Your Vue.js App"/>

组件之间的数据是要相互传递的,这里的组件对于整个页面来说,子组件和父组件。

父组件要往子组件里面传数据, 因为有时候子组件的页面展示内容是由你父组件决定的。那父组件给子组件传参的时候来决定子组件到底传递什么内容。

父组件是如何传递给子组件的数据?在子组件当中定义props属性即可。

<script>
export default {
  name: 'HelloWorld',   //当前页面的名称

//props定义了父组件传递给子组件的数据
  props: {
    msg: String
  }
}
</script>

或者下面写法也行
export default {
  name: 'HelloWorld',
  props: {
    msg: {
      Type: String,
      default: ''
    }
  }
}

当你在子组件定义了父亲组件传给子组件的props,定义之后也不需要去子组件data里面去声明了,可以直接使用,将这个值放到template里面的。

<template>
  <div class="hello">
    <h1>{{ msg }}</h1>

HelloWord.vue这个组件,这个页面,这个视图。这个标题是由父亲组件App.vue

<template>
  <!--<img alt="Vue logo" src="./assets/logo.png">-->
  <!--在下方局部注册了之后,就可以在vue文件当中使用-->
  <HelloWorld msg="这个是父组件定义的标题页"/>
  <div>
    <!--在mianjs全局注册后,即可通过组件名称全局使用-->
    <Test></Test>
  </div>
</template>

如果不希望写死,可以使用v-bind,前面使用了v-bind之后,在=""的时候就可以传递data属性里面的变量了。如果不使用v-bind,那么""里面就得写死了,不能写变量.

<HelloWorld :msg="msg"/>

 App.vue

<template>
  <Test v-bind:name="name" :content=content></Test>
</template>

<script>
export default {
  name: 'App',
  data(){
    return{
      name: "lucas very good",
      content: false
    }
  }
}
</script>

 Test.vue

<template>
    <div>
        <button type="button" @click="btn()">Test按钮</button>
        <p>content value:{{ content }}</p>
        <p>name value:{{ name }}</p>

    </div>
</template>


<script>

export default ({
 //定义父亲组件传递给子组件的数据,属性名为test,类型为string
    props:{
      name: String,
      content: Boolean 
    }, 
    data() {
        return{

        }
    },
    methods:{
        btn(){
        //在js中使用props数据
        console.log(this.content)
        console.log(this.name)
        console.log("test按钮点击之后效果") 
        }
    }
})
</script>

emit子传父亲(子组件调用父组件方法)


通过this.emit的方式去定义了一个事件,然后将数据放到事件里面去。在父亲组件里面去监听childmsg事件,绑定receive方法,通过receive方法接收子组件传过来的参数。(其实也就是在子组件里面发生了一个事件,这个事件通过emit来定义,最终在父组件里面去监听,监听到该事件,在方法里面拿到相应的数据)

父亲传子比较简单,子传父亲需要定义方法去接受它。

<template>
  <!--@是监听事件的,它就是监听childmsg的一个事件-->
  <Test v-bind:name="name" :content=content  @childMsg="receive"></Test>
</template>

<script>
export default {
  name: 'App',
  data(){
    return{
      name: "lucas very good",
      content: false
    }
  },
  methods:{
    receive(data){
      alert(data)
      console.log(data)
    }
  }
}
</script>
<template>
    <div>
        <button type="button" @click="btn()">Test按钮</button>
        <button type="button" @click="btn1()">传递数据到父组件</button>
        <p>content value:{{ content }}</p>
        <p>name value:{{ name }}</p>

    </div>
</template>


<script>

export default ({
    props:{
      name: String,
      content: Boolean 
    }, 
    data() {
        return{
          Msg: "你好,我是子组件数据!"
        }
    },
    methods:{
        btn(){
            console.log(this.name)
            console.log(this.content)  
        },
        btn1(){
            //this.$emit用于将子组件的数据传递给父组件
            //第一个参数表示父组件接受的方法,第二个参数表示具体传递的值
            //emit就是子组件调用父组件的方法,这里触发了childMsg事件
            this.$emit('childMsg',this.Msg)
        }
    }
})
</script>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/803110.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Docker复习

目录 1. Docker的理解1.1 Docker三要素 2 安装Docker2.1 安装命令2.2 配置阿里云加速器 3 Docker命令3.1 启动类命令3.2 镜像类命令 4 实战4.1 启动容器&#xff0c;自动创建实例4.2 查看Docker内启动的容器4.3 退出容器4.4 其他4.5 导入导出文件4.6 commit 5 Dockerfile5.1 理…

MySQL数据库局域网连接

目录 前言 客户端 开启访问权限 防火墙设置 windows Linux 测试连接 前言 MySQL数据库远程连接&#xff08;局域网&#xff09;是指在局域网内的不同计算机或设备之间&#xff0c;通过网络连接到MySQL数据库服务器的过程。在这种情况下&#xff0c;MySQL数据库服务器位…

编译原理

一&#xff0c;基本概念 二&#xff0c;词法分析

使用python部署chineseocr_lite

使用python部署chineseocr_lite 简介安装报错解决python调用结果 简介 项目地址&#xff1a;https://github.com/DayBreak-u/chineseocr_lite chineseocr_lite 是一个开源项目&#xff0c;用来实现中文的文字识别&#xff0c;支持竖排文字识别、繁体识别&#xff0c;总模型只…

Mysql加锁过程

1、背景 MySQL/InnoDB的加锁分析&#xff0c;一直是一个比较困难的话题。我在工作过程中&#xff0c;经常会有同事咨询这方面的问题。同时&#xff0c;微博上也经常会收到MySQL锁相关的私信&#xff0c;让我帮助解决一些死锁的问题。本文&#xff0c;准备就MySQL/InnoDB的加锁问…

最优除法(力扣)数学 JAVA

给定一正整数数组 nums&#xff0c;nums 中的相邻整数将进行浮点除法。例如&#xff0c; [2,3,4] -> 2 / 3 / 4 。 例如&#xff0c;nums [2,3,4]&#xff0c;我们将求表达式的值 “2/3/4”。 但是&#xff0c;你可以在任意位置添加任意数目的括号&#xff0c;来改变算数的…

LT2911R -D 是一款MIPI/TTL和LVDS互转的一款高性能旋转芯片

LT2911R -D 1.概述&#xff1a;LT2911R-D是一种在MIPI/TTL/LVDS之间相互转换的高性能转换器&#xff0c;除了LVDS转MIPI除外。LT2911R-D反序列化输入的MIPI/LVDS/TTL视频数据&#xff0c;解码数据包、旋转视频、改变帧率&#xff0c;并将格式化的视频数据流转换为AP和移动显示…

给你推荐几个好用的Android Studio插件

给你推荐几个好用的Android Studio插件 1. CodeGlance&#xff08;代码全景&#xff09; 类似于Sublime或Xcode&#xff0c;此插件在您的编辑器中嵌入了一个代码迷你地图。滚动条也会变得稍大一些。CodeGlance预览了文件的代码模式&#xff0c;让您快速导航到所需的部分。 …

QUiLoader:彻底分离你的Ui设计工作

QUiLoader:彻底分离你的Ui设计工作 1. QUiLoader:彻底分离你的Ui设计工作widget.hwidget.cpp 2. Qt、C动态UI3. QT 使用QLibrary加载动态库 1. QUiLoader:彻底分离你的Ui设计工作 原文链接&#xff1a;https://blog.csdn.net/adonis1620/article/details/5794797 Trolltech提…

加入气压计模组,星斗3号将实现快速三维定位

随着信息技术的飞速发展,人们的生活正在发生巨大改变,人们对基于位置服务的需求越来越迫切,尤其是室内位置服务。 室外定位系统中BDS系统、GPS系统等受室内复杂环境条件限制精度大幅下降甚至失效,难以在室内定位中发挥作用,而室内二维定位技术缺乏高程信息,也难以满足人们对室…

独立式电火花脉冲电源的放电回路

根据一篇专利来的 电火花加工电源的放电回路 1 电火花电源的放电回路 电火花加工电源的放电回路,包括工作电源、充电电源以及由电极和工件连接端子组成的放电支路,还包括分别与所述放电支路并联的消电离支路、负波吸收支路和增爆电容支路&#xff0c;所述放电支路的电极端连…

【多模态】19、RegionCLIP | 基于 Region 来实现视觉语言模型预训练

文章目录 一、背景二、方法2.1 Region-based Language-Image Pretraining2.2 目标检测的迁移学习 三、效果3.1 数据集3.2 实现细节3.3 结果 论文&#xff1a; RegionCLIP: Region-based Language-Image Pretraining 代码&#xff1a;https://github.com/microsoft/RegionCLIP …

要理解用户空间与内核空间之间的关系

需要对内核有深入的认识。从两个不同的角度来理解内核&#xff1a;一是从静态角度&#xff0c;内核可以被看作一个类库&#xff0c;对外提供API接口&#xff1b;二是从动态角度&#xff0c;内核启动多个内核线程提供系统服务&#xff0c;这些线程在ps命令下可以被看到。 当用户…

二级制部署kubernetes(1.20)

&#x1f618;作者简介&#xff1a;一名运维工作人员。 &#x1f44a;宣言&#xff1a;人生就是B&#xff08;birth&#xff09;和D&#xff08;death&#xff09;之间的C&#xff08;choise&#xff09;&#xff0c;做好每一个选择。 &#x1f64f;创作不易&#xff0c;动动小…

HarmonyOS/OpenHarmony元服务开发-卡片使用动效能力

ArkTS卡片开放了使用动画效果的能力&#xff0c;支持显式动画、属性动画、组件内转场能力。需要注意的是&#xff0c;ArkTS卡片使用动画效果时具有以下限制&#xff1a; 以下示例代码实现了按钮旋转的动画效果&#xff1a; Entry Component struct AttrAnimationExample { St…

系列二、RocketMQ简介

一、概述 RocketMQ是一款阿里巴巴开源的消息中间件。2016年11月28日&#xff0c;阿里巴巴向Apache软件基金会捐赠RabbitMQ&#xff0c;成为Apache孵化项目。2017年9月25日&#xff0c;Apache宣布RocketMQ孵化成为Apache顶级项目&#xff08;TLP&#xff09;&#xff0c;成为国内…

01)docker学习 centos7离线安装docker

docker学习 centos7离线安装docker 在实操前可以先看下docker教程,https://www.runoob.com/docker/docker-tutorial.html , 不过教程上都是在线安装方式,很方便,离线安装肯定比如在线麻烦点。 一、什么是Docker 在学习docker时,在网上看到一篇博文讲得很好,自己总结一下…

日期类的实现【C++】

1、Date.h #pragma once #include <iostream> using namespace std;class Date { public:Date(int year 1, int month 1, int day 1);void Print();//Date& operator(const Date& d); //赋值重载int GetMonthDay(int year, int month);bool operator<(con…

CSDN周赛66期图文题解 - 路灯亮度 池塘水量

本期非编程题考察更多是对原书的阅读理解&#xff0c;可能还是因为自己理解不够&#xff0c;翻了半天书&#xff0c;还是错了两道。失之我命&#xff0c;不多废话。 本期编程题比较符合我的胃口&#xff0c;有陷阱&#xff0c;有技巧&#xff0c;窃以为是最近不少期里比较有意…

华为eNSP通过VMnet8虚拟网卡,NAT转换访问互联网

防火墙上配置&#xff1a; 配置G1/0/1接口IP地址&#xff0c;其实G1/0/1的IP就是终端PC1的网关地址。 配置G1/0/0接口自动获取IP地址&#xff0c;从VMnet8中自动获取地址。 配置安全区域zone,把对应的接口加入到对应的zone中 配置安全策略&#xff0c;放通trust安全区域到u…