03-02-Vue组件之间的传值

news2024/12/28 4:11:17

前言

我们接着上一篇文章 03-01-Vue组件的定义和注册 来讲。


下一篇文章 04-Vue:ref获取页面节点–很简单

父组件向子组件传值

我们可以这样理解:Vue实例就是一个父组件,而我们自定义的组件(包括全局组件、私有组件)就是子组件

【重点】需要注意的是,子组件不能直接使用父组件中的数据。父组件可以通过props属性向子组件传值

父组件向子组件传值的代码举例

父组件:

<template>
  <div id="app">
    <MyComponent :msg="message"></MyComponent>
  </div>
</template>

<script>
import MyComponent from './components/MyComponent.vue';
export default {
  components:{
    MyComponent
  },
  data(){
    return{
      message: '这是父组件中的变量'
    }
  }
};
</script>

子组件:

<template>
    <div>
        这是组件中的内容, msg: {{ msg }}
    </div>
</template>

<script>
export default {
    props: ['msg']
};
</script>

<style>
</style>

效果如下:

3

父组件给子组件传值的步骤

根据上方截图,我们可以总结出父组件给子组件传值的步骤如下。

(1)在子组件的props属性中声明父亲传递过来的数据

(2)使用子组件的模板时,绑定props中对应的属性

(3)父组件在引用子组件时,进行属性绑定。

子组件中,data中的数据和props中的数据的区别

  • 子组件中的 data 数据,并不是通过 父组件传递过来的,而是子组件自身私有的,比如: 子组件通过 Ajax ,请求回来的数据,都可以放到 data 身上。props 中的数据,都是通过 父组件 传递给子组件的。

  • data中的数据是可读可写的;props中的属性只是可读的,无法重新赋值,重新赋值会报错(也就是说,子组件不要直接去修改父组件中的数据)。

父组件将方法传递给子组件

父组件通过事件绑定机制,将父组件的方法传递给子组件

父组件代码:

<template>
  <div id="app">
    <!-- 父组件向子组件 传递 方法,是通过 事件绑定机制; v-on。当我们自定义了 一个 事件属性 parent-show(这个地方不能用驼峰命名)之后,-->
    <!-- 那么,子组件就能够,通过 emit 来调用 传递进去的 这个 方法了 -->
    <!-- 【第一步】。意思是说,`show`是父组件的方法名,`parent-show`是自定义的时间属性,稍后要在子组件中用到 -->
    <MyComponent :msg="message" @parentShow="show"></MyComponent>
  </div>
</template>

<script>
import MyComponent from "./components/MyComponent.vue";
export default {
  components: {
    MyComponent,
  },
  data() {
    return {
      message: "这是父组件中的变量",
    };
  },
  methods: {
    // 定义父组件的show方法
    show() {
      console.log("这是父组件的方法");
    },
  },
};
</script>

子组件代码:

<template>
    <!-- 【第二步】按照正常的写法来:点击按钮,调用子组件的方法 -->
    <div @click="handleClick">这是组件中的内容, msg: {{ msg }}</div>
</template>

    <script>
export default {
    props: ["msg"],
    methods: {
        handleClick() {
        // 当点击子组件的按钮时,如何 拿到 父组件传递过来的 func 方法,并调用这个方法???
        //  emit 英文原意: 是触发,调用、发射。意思是,触发父组件的方法
        // 【第三步】 在子组件的方法中,通过 emit 触发父组件的方法
        this.$emit("parentShow");
        },
    },
};
</script>

<style>
</style>

效果如下:(点击子组件,触发了父组件的方法)

4

根据上面的代码,我们可以总结出,父组件将方法传递给子组件,分为三步,具体可以看上方代码的注释。

子组件向父组件传值

上面的一段中,我们再看一遍父组件将方法传递给子组件的这段代码(一定要再看一遍,因为我们是要在此基础之上做修改)。

如果要实现子组件向父组件传值,代码是类似的,我们只需要在子组件通过emit触发父组件的方法时,把子组件的参数带出去就可以了。代码如下。

父组件代码:

<template>
  <div id="app">
    <MyComponent :msg="message" @parentShow="show"></MyComponent>
  </div>
</template>

<script>
import MyComponent from "./components/MyComponent.vue";
export default {
  components: {
    MyComponent,
  },
  data() {
    return {
      message: "这是父组件中的变量",
    };
  },
  methods: {
    // 定义父组件的show方法
    show(data1, data2) { //【第二步】父组件里放两个参数,这个两个参数就代表着子组件中的`childData1`、`childData2`
      console.log("这是父组件的方法");
      console.log('子组件传值:',data1, data2);
    },
  },
};
</script>

子组件代码:

<template>
    <div @click="handleClick">这是组件中的内容, msg: {{ msg }}</div>
</template>

    <script>
export default {
    props: ["msg"],
    methods: {
        handleClick() {
        // 子组件如果要给父组件传递参数,在触发 emit 的时候,通过参数的形式带出去就可以了
        // 【第一步】在子组件里,我们带两个参数出去,传给父组件
        this.$emit("parentShow", 'childData1', 'childData2');
        },
    },
};
</script>

    <style>
</style>

运行结果:(点击之后)

5

代码举例2:(将子组件中的data数据传递给父组件,存放到父组件的data中)

在上方代码的基础之上,做改进。

父组件代码

<template>
  <div id="app">
    <MyComponent :msg="message" @parentShow="show"></MyComponent>
  </div>
</template>

<script>
import MyComponent from "./components/MyComponent.vue";
export default {
  components: {
    MyComponent,
  },
  data() {
    return {
      message: "这是父组件中的变量",
      parentData: null,
    };
  },
  methods: {
    // 定义父组件的show方法
    show(arg) {//【第二步】父组件里放参数,这个参数就代表着子组件中的 child.data
      console.log("父组件提供的方法");
      this.parentData = arg; //将参数arg传递给父组件的data,也就达到了目的:子组件传递数据,赋值给父组件
      console.log(
        "打印父组件的数据(这是子组件传过来的):" +
          JSON.stringify(this.parentData)
      );
    },
  },
};
</script>

子组件代码

<template>
    <div @click="handleClick">这是组件中的内容, msg: {{ msg }}</div>
</template>

    <script>
export default {
    props: ["msg"],
    data(){
        return{
            childData: { //定义自组件的数据
                name: 'HydeLinjr',
                age: 26
            }
        }
    },
    methods: {
        handleClick() {
        // 子组件如果要给父组件传递参数,在触发 emit 的时候,通过参数的形式带出去就可以了
        // 【第一步】在子组件里,我们带两个参数出去,传给父组件
        this.$emit("parentShow", this.childData);
        },
    },
};
</script>

    <style>
</style>

运行结果:(点击之后)

6

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

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

相关文章

C# GDI+ 绘制文字不同的操作系统渲染文字大小不同

一、C# GDI 绘制文字不同的操作系统渲染文字大小不同 原因&#xff1a;使用Font 字体的时候&#xff0c;没有指定字体渲染的单位。 不同系统的默认字体单位会不同。 二、解决方案&#xff1a; 在指定字体的时候&#xff0c;指定字体大小&#xff0c;同时也要设置字体的单位 …

基于FMU的Star CCM+与Amesim复杂控制联合分析

1、背景: 当前Star CCM+的逻辑控制功能并不强大,当需要仿真复杂多变的工况时往往力不从心。为了解决该问题,当前有两个方案可以尝试,分别如下: 方案1:利用AMEsim与Star CCM+联合仿真,通过tcp传输模块来实现两者的实时耦合。 方案2:利用AMEsim导出FMU文件,然后将FMU…

部署PIM-SM

拓扑图 配置 使能组播路由 配置OSPF 组播路由器接口配置pim-sm 连接组成员的接口使能igmp pim路由器上配置静态RP sysname AR1 # multicast routing-enable # interface GigabitEthernet0/0/0ip address 10.1.12.1 255.255.255.0 pim sm # interface GigabitEthernet0/0/…

软件设计师备考 | 案例专题之数据流图 概念与例题

案例分析专题大纲&#xff1a; 数据流图基本概念 基本图形元素&#xff1a;外部实体、加工、数据存储、数据流 数据流&#xff1a;由一组固定成分的数据组成&#xff0c;表示数据的流向。在DFD中&#xff0c;数据流的流向必须经过加工。加工&#xff1a;描述了输入数据流到输出…

idea 出现 cpu占用100%

一、IDEA的CPU占用率过高 二、解决办法 idea安装路径bin目录 修改idea64.exe.vmoptions配置文件 原来的 -Xms128m -Xmx750m -XX:ReservedCodeCacheSize240m -XX:UseConcMarkSweepGC -XX:SoftRefLRUPolicyMSPerMB50 修改为(IDEA优化内存配置) -Xms2048m -Xmx4096m -XX:Reser…

基于Spring Boot的高校图书馆管理系统

项目和论文都有企鹅号2583550535 基于Spring Boot的图书馆管理系统||图书管理系统_哔哩哔哩_bilibili 第1章 绪论... 1 1.1 研究背景和意义... 1 1.2 国内外研究现状... 1 第2章 相关技术概述... 2 2.1 后端开发技术... 2 2.1.1 SpringBoot 2 2.1.2 MySQL.. 2 2.1.3 My…

Git简介以及下载安装和配置

Git介绍 什么是版本控制?什么是Git?什么是集中式版本控制(了解)分布式版本控制工作流程 Git的安装与配置注册邮箱以及用户名(方便远程使用)初始化项目Git在ideal上的使用(本地) 什么是版本控制? ​ 版本控制是指对软件开发过程中各种程序代码,控制文件及说明文档等文件变更…

口碑比较好的相亲交友平台有哪些?正规靠谱的相亲软件排行榜测评

在网络时代&#xff0c;越来越多的人热衷于使用相亲交友软件来寻找生命中的另一半。这些软件确实为许多用户提供了真实可靠的交友平台。然而&#xff0c;市面上的相亲软件种类繁多&#xff0c;质量良莠不齐&#xff0c;让人难以选择。今天&#xff0c;我将介绍几款我使用过且认…

【vue-5】双向数据绑定v-model及修饰符

单向数据绑定&#xff1a;当数据发生改变时&#xff0c;视图会自动更新&#xff0c;但当用户手动更改input的值&#xff0c;数据不会自动更新&#xff1b; 双向数据绑定&#xff1a;当数据发生改变时&#xff0c;视图会自动更新&#xff0c;但当用户手动更改input的值&#xf…

View function mapping is overwriting an existing endpoint function: home_page

这个错误是因为在你的 Flask 应用中,你定义了两个或多个视图函数,它们使用了相同的 endpoint 名称。Flask 不允许多个视图函数使用相同的 endpoint 名称,因为这会导致冲突。 通常,这个错误会出现在以下几种情况下: 你在不同的路由装饰器中使用了相同的 endpoint 名称。你…

C++之第八课

课程列表 今天我们来学一学C里的一些实用的东西。 1.域宽 说到域宽setw&#xff0c;就叒要加头文件了。 #include<iomanip> 使用格式是&#xff1a; cout<<setw(5)<<"123"; setw括号里面可以改数字&#xff0c;后面就是输出内容了&#xff…

服务器端口号怎么看?如何查看服务器端口号呢?有哪些需要注意的?

简单来说&#xff0c;端口号就是计算机与外界通讯交流的出口&#xff0c;每个端口都有不同的编号&#xff0c;也就是“端口号”。它们是唯一的&#xff0c;用于标识不同的服务和应用程序。通过端口号&#xff0c;我们可以知道哪些服务正在运行&#xff0c;以及如何与它们进行通…

基于JSP/Servlet校园二手交易平台(二)

目录 2 开发技术及开发环境 2.1 Java语言简介 2.2 J2EE技术介绍 2.3 Servlet/JSP技术 2.4 MVC 简介 2.5 Struts 技术 2.6 Hibernate 技术 2.6.1 应用程序的分层体系结构 2.6.2 Hibernate的应用及API简介 2.7 开发环境及环境配置 2.7.1 Java/JSP系统环境 2.7.2 JSP环…

MySQL——约束与表的设计基础

前言 本篇文章主要介绍数据库约束以及数据库中有关表设计的一些基础知识&#xff0c;文章会尽量都用实例进行直观的讲解与展示每个知识点的意义&#xff0c;现在就开始今天的学习吧&#xff01;&#xff01; 一、数据库约束 1.约束概述 约束&#xff0c;就是在创建表的时候给…

leedcode【209】. 长度最小的子数组——Java解法

Problem: 209. 长度最小的子数组 题目思路解题方法复杂度Code效果 题目 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 连续 子数组 [numsl, numsl1, ..., numsr-1, numsr] &#xff0c;并返回其长度。如果不存…

TypeScript-类型注解

TS类型注解 指的是给变量添加类型约束&#xff0c;使变量只能被赋值为约定好的类型&#xff0c;同时可以有相关的类型提示 TS支持的常用类型注解 Js 已有类型 // 简单类型 number string boolean null undefined // 复杂类型 数组 函数 Ts 新增类型 联合类型、类型别名、接…

ColossalAI Open-Sora 1.1 项目技术报告 (视频生成)

项目信息 项目地址&#xff1a;https://github.com/hpcaitech/Open-Sora技术报告&#xff1a; Open-Sora 1&#xff1a;https://github.com/hpcaitech/Open-Sora/blob/main/docs/report_01.mdOpen-Sora 1.1&#xff1a;https://github.com/hpcaitech/Open-Sora/blob/main/docs…

解决移植Metasploitable3到VM虚拟机无网络的问题

第一步 导入后不要开机&#xff0c;先在虚拟机设置里面将原有的两个网络适配器移除。 第二步 接着在选项里面&#xff0c;在客户机操作系统里面&#xff0c;选择Microsoft Windwos(W)&#xff0c; 版本选择Windows Server 2008 R2 x64 第三步 先打开虚拟机&#xff0c;然后…

[书生·浦语大模型实战营]——第二节:课后作业

基础作业 1.使用 InternLM2-Chat-1.8B 模型生成 300 字的小故事 2.使用书生浦语 Web 和浦语对话&#xff0c;和书生浦语对话&#xff0c;并找到书生浦语 1 处表现不佳的案例(比如指令遵循表现不佳的案例)&#xff0c;提交到问卷。 进阶作业 1.huggingface下载功能学习 pip i…

【C++】异常的详细讲解

前言 C是一门面向对象的语言&#xff0c;和面向过程的C语言有很多不一样的&#xff0c;其中这两种语言对程序错误的处理方式就不一样&#xff0c;通常面向对象是通过抛异常的方式来处理错误&#xff0c;而C语言则是通过返回错误码的方式。 目录 1. C语言处理错误的方式2. C异常…