vue中组件的传递取值方式总结

vue中组件的传递取值方式总结

  • 目录
    • 概述
      • 需求:
    • 设计思路
    • 实现思路分析
      • 1.父子传参
      • 2.vue 子组件接收数据进行渲染或处理
      • 3.父组件通过v-on监听自定义事件并取得传递的值
      • 4.ref引用子组件
      • 5.通过provide/inject传值
      • 6.attrs和listeners
      • 7.通过vuex进行全局状态管理
      • 8.Vue mixin
      • 9.通过provide/inject实现跨级组件通信
      • 10.parent和children实现父子组件通信
  • 参考资料和推荐阅读

Survive by day and develop by night.
talk for import biz , show your perfect code,full busy,skip hardness,make a better result,wait for change,challenge Survive.
happy for hardess to solve denpendies.

目录

在这里插入图片描述

概述

需求:

设计思路

实现思路分析

1.父子传参

父组件通过props属性将数据传递给子组件的步骤如下:

  1. 在父组件中定义要传递的数据,并将其作为props属性传递给子组件。例如:
import React from 'react';
import ChildComponent from './ChildComponent';

class ParentComponent extends React.Component {
  render() {
    const data = "Hello, world!";
    return (
      <div>
        <ChildComponent message={data} />
      </div>
    );
  }
}

export default ParentComponent;
  1. 在子组件中接收通过props传递的数据。例如:
import React from 'react';

class ChildComponent extends React.Component {
  render() {
    return (
      <div>
        <p>{this.props.message}</p>
      </div>
    );
  }
}

export default ChildComponent;

在子组件中,可以通过this.props来访问传递的数据,这里的this.props.message即为父组件传递的数据。

通过以上步骤,父组件就可以将数据通过props属性传递给子组件了。

2.vue 子组件接收数据进行渲染或处理

在Vue.js中,子组件可以通过props属性来接收父组件传递过来的数据进行渲染或处理。下面是一个例子:

在父组件中,我们定义一个属性并传递给子组件:

<template>
  <div>
    <child-component :message="message"></child-component>
  </div>
</template>

<script>
import ChildComponent from './ChildComponent.vue';

export default {
  components: {
    ChildComponent
  },
  data() {
    return {
      message: 'Hello, World!'
    };
  }
};
</script>

在子组件中,我们通过props接收父组件传递的数据,并进行渲染或处理:

<template>
  <div>
    <p>{{ message }}</p>
    <button @click="reverseMessage">Reverse</button>
  </div>
</template>

<script>
export default {
  props: ['message'],
  methods: {
    reverseMessage() {
      this.message = this.message.split('').reverse().join('');
    }
  }
};
</script>

在子组件中,我们使用props: ['message']来定义一个props属性,这样就可以接收父组件传递过来的message数据。然后我们可以在子组件的模板中使用{{ message }}来渲染这个数据。

另外,我们还可以在子组件中定义方法来处理这个数据。在这个例子中,我们定义了一个reverseMessage方法,用于反转message数据。当点击按钮时,会调用这个方法来改变message的值。

总结一下,子组件可以通过props属性来接收父组件传递过来的数据,并且可以在组件的模板和方法中使用这些数据进行渲染和处理。

3.父组件通过v-on监听自定义事件并取得传递的值

在父组件中,你可以通过v-on指令来监听子组件触发的自定义事件,并取得传递的值。以下是一个示例:

父组件模板:

<template>
  <div>
    <h2>父组件</h2>
    <p>{{ message }}</p>
    <child-component 
      v-on:custom-event="handleCustomEvent">
    </child-component>
  </div>
</template>

父组件脚本:

<script>
import ChildComponent from './ChildComponent.vue';

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

子组件模板:

<template>
  <div>
    <h2>子组件</h2>
    <button v-on:click="emitCustomEvent">触发自定义事件</button>
  </div>
</template>

子组件脚本:

<script>
export default {
  methods: {
    emitCustomEvent() {
      const value = 'Hello, World!';
      this.$emit('custom-event', value);
    }
  }
}
</script>

在父组件中使用v-on指令监听子组件的custom-event事件,并在父组件的handleCustomEvent方法中接收传递的值。然后将值赋给父组件的message属性,从而动态更新父组件的模板中的message内容。当子组件中的按钮被点击时,会触发自定义事件,并将’value’传递给父组件。

4.ref引用子组件

要在 Vue 中通过 ref 引用子组件,可以按照以下步骤进行操作:

  1. 在父组件中,使用 ref 属性给子组件命名。例如:<child-component ref="child"></child-component>
  2. 在父组件中,可以通过 this.$refs 来访问子组件的实例。例如:this.$refs.child 可以获取到子组件的实例。
  3. 使用子组件实例的属性或方法来传递值。例如:this.$refs.child.value = 'Hello' 可以在子组件中设置一个名为 value 的属性,并将其值设置为 'Hello'

下面是一个完整的例子:

<template>
  <div>
    <child-component ref="child"></child-component>
    <button @click="passValue">传递值给子组件</button>
  </div>
</template>

<script>
import ChildComponent from './ChildComponent.vue';

export default {
  components: {
    ChildComponent
  },
  methods: {
    passValue() {
      this.$refs.child.value = 'Hello';
      console.log(this.$refs.child.value); // 输出 'Hello'
    }
  }
}
</script>
<!-- ChildComponent.vue -->
<template>
  <div>
    {{ value }}
  </div>
</template>

<script>
export default {
  data() {
    return {
      value: ''
    }
  }
}
</script>

在上面的例子中,父组件通过 ref 属性给子组件命名为 child,然后在 passValue 方法中,通过 this.$refs.child.value 来设置子组件的 value 属性,并将其值设置为 'Hello'。最后,我们可以在子组件中显示 value 的值。

5.通过provide/inject传值

在Vue中,可以使用provideinject来在父组件和子组件之间进行值的传递。

首先,在父组件中,使用provide来提供要传递的值。例如:

// 父组件
provide() {
  return {
    message: 'Hello, Vue!'
  };
}

然后,在子组件中,使用inject来注入传递的值。例如:

// 子组件
inject: ['message'],
mounted() {
  console.log(this.message); // 输出: Hello, Vue!
}

在这个例子中,父组件通过provide提供了message的值为'Hello, Vue!',子组件通过injectmessage注入到子组件中,并在mounted生命周期钩子中使用。

需要注意的是,provideinject并不是响应式的,也就是说如果提供的值发生变化,子组件不会自动更新。如果需要实现响应式的值传递,可以考虑使用propsemit来实现。

6.attrs和listeners

在Vue中,您可以使用$attrs$listeners来获取父组件传递的属性和事件。

$attrs是一个包含了父组件传递的所有属性的对象。您可以在子组件的模板中通过v-bind指令将$attrs中的属性绑定到子组件的相应属性上。例如:

<template>
  <div>
    <p>{{ $attrs.foo }}</p>
    <p>{{ $attrs.bar }}</p>
  </div>
</template>

在上面的例子中,父组件可以通过以下方式传递属性给子组件:

<child-component foo="Hello" bar="World"></child-component>

子组件将会显示父组件传递的属性值。

$listeners是一个包含了父组件传递的所有事件监听器的对象。您可以在子组件的模板中通过v-on指令将$listeners中的事件绑定到子组件的相应事件上。例如:

<template>
  <button v-on="$listeners">{{ $attrs.buttonText }}</button>
</template>

在上面的例子中,父组件可以通过以下方式传递事件给子组件:

<child-component buttonText="Click me" @click="handleClick"></child-component>

当子组件的按钮被点击时,父组件定义的handleClick方法将会被调用。

请注意,$attrs$listeners只会包含没有被子组件的props和事件监听器所接收的属性和事件。如果您希望将父组件的所有属性和事件传递给子组件,可以使用v-bind="$attrs"v-on="$listeners"来简化代码。例如:

<template>
  <child-component v-bind="$attrs" v-on="$listeners"></child-component>
</template>

这样,父组件的所有属性和事件都会被传递给子组件。

7.通过vuex进行全局状态管理

创建全局store对象来存储数据

8.Vue mixin

Vue mixin 可以用来共享组件之间的代码。您可以在 mixin 中定义一个方法来获取数据,并在需要这些数据的组件中混入这个 mixin。

首先,定义一个 mixin,例如:

// myMixin.js
export default {
  methods: {
    fetchData() {
      // 获取数据的代码
      return fetch('https://api.example.com/data')
        .then(response => response.json())
        .then(data => {
          // 处理数据
          // 返回处理后的数据
          return data;
        });
    }
  }
}

然后,在需要获取数据的组件中混入这个 mixin:

// MyComponent.vue
import myMixin from './myMixin';

export default {
  mixins: [myMixin],
  created() {
    this.fetchData().then(data => {
      // 在这里处理获取的数据
    });
  }
}

上述代码中,MyComponent 组件混入了 myMixincreated 生命周期钩子中调用了 fetchData 方法来获取数据,并在 then 中进行数据处理。

混入的方法会被合并到组件中,因此您可以在组件中直接调用混入的方法。混入的数据和方法会在组件的实例中生效。

9.通过provide/inject实现跨级组件通信

在Vue中,可以使用provide和inject来实现跨级组件通信。provide是在父组件中声明数据,而inject是在子组件中注入数据。

下面是一个示例:

// 父组件
<template>
  <div>
    <child-component></child-component>
  </div>
</template>

<script>
import ChildComponent from './ChildComponent.vue';

export default {
  components: {
    ChildComponent
  },
  provide() {
    return {
      message: 'Hello from parent component'
    };
  }
};
</script>
// 子组件
<template>
  <div>
    <grand-child-component></grand-child-component>
  </div>
</template>

<script>
import GrandChildComponent from './GrandChildComponent.vue';

export default {
  components: {
    GrandChildComponent
  },
  inject: ['message']
};
</script>
// 孙子组件
<template>
  <div>
    <p>{{ message }}</p>
  </div>
</template>

<script>
export default {
  inject: ['message']
};
</script>

在上面的示例中,父组件通过provide提供了一个名为message的数据,子组件通过inject注入了这个数据,并在模板中展示出来。孙子组件也通过inject注入了message数据,并展示出来。

这样,父组件的数据就可以通过inject在子组件和孙子组件中共享和使用了,实现了跨级组件通信。

10.parent和children实现父子组件通信

在Vue中,父子组件间的通信可以通过props和事件来实现。

  1. 使用props向子组件传递数据:
    在父组件中,可以通过props属性将数据传递给子组件。子组件中可以通过this.$props访问传递过来的属性。

    // Parent.vue
    <template>
      <div>
        <Child :message="message" />
      </div>
    </template>
    
    <script>
    import Child from './Child.vue';
    
    export default {
      components: {
        Child
      },
      data() {
        return {
          message: 'Hello from Parent!'
        };
      }
    };
    </script>
    
    // Child.vue
    <template>
      <div>
        <p>{{ message }}</p>
      </div>
    </template>
    
    <script>
    export default {
      props: ['message'],
      mounted() {
        console.log(this.$props.message); // Output: Hello from Parent!
      }
    };
    </script>
    
  2. 使用事件向父组件传递数据:
    在子组件中,可以通过$emit方法触发一个自定义事件,并将数据作为参数传递给父组件。父组件可以通过@event-name的方式监听子组件触发的事件,并在对应方法中处理数据。

    // Parent.vue
    <template>
      <div>
        <Child @update-message="updateMessage" />
      </div>
    </template>
    
    <script>
    import Child from './Child.vue';
    
    export default {
      components: {
        Child
      },
      data() {
        return {
          message: ''
        };
      },
      methods: {
        updateMessage(newMessage) {
          this.message = newMessage;
        }
      }
    };
    </script>
    
    // Child.vue
    <template>
      <div>
        <button @click="sendMessage">Send Message</button>
      </div>
    </template>
    
    <script>
    export default {
      methods: {
        sendMessage() {
          this.$emit('update-message', 'Hello from Child!');
        }
      }
    };
    </script>
    

通过props和事件,父子组件之间就可以实现双向通信。父组件可以向子组件传递数据,子组件也可以通过触发事件的方式向父组件传递数据。

参考资料和推荐阅读

参考资料
官方文档
开源社区
博客文章
书籍推荐

欢迎阅读,各位老铁,如果对你有帮助,点个赞加个关注呗!同时,期望各位大佬的批评指正~,如果有兴趣,可以加文末的交流群,大家一起进步哈

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python 分支结构案例-个人所得税计算器

个人所得税的计算方法&#xff08;旧版&#xff09;如下表&#xff1a; 要使用代码根据工资计算税后收入&#xff0c;可以用分支结构编写一个计算器&#xff1a; """ example018 - 个人所得税&#xff08;旧版算法&#xff09;计算器Author: 不在同一频道上的呆…

扩展卡尔曼滤波(Extended Kalman Filter, EKF):理论和应用

扩展卡尔曼滤波&#xff08;Extended Kalman Filter, EKF&#xff09;&#xff1a;理论、公式和应用 引言 卡尔曼滤波是一种广泛应用于估计动态系统状态的技术&#xff0c;但当系统的动态模型或测量模型是非线性的时候&#xff0c;传统的卡尔曼滤波方法就显得无能为力。扩展卡…

Modbus协议学习第二篇之Modbus poll slave仿真软件初体验

软件准备 学习Modbus离不开硬件&#xff0c;好在我们可以通过仿真软件来模拟硬件&#xff0c;本篇博客就来简单介绍一下Modbus仿真软件的最基础使用方法&#xff0c;需要用到的3款仿真软件如下&#xff1a; Modbus Poll 64位 / Modbus Poll 32位&#xff08;根据自己机器位数选…

机器学习周记(第二十五周:文献阅读-DSTIGNN)2024.1.8~2024.1.14

目录 摘要 ABSTRACT 1 论文标题 2 论文摘要 3 论文背景 4 过去研究 5 论文研究 5.1 问题描述 5.2 论文模型 5.2.1 时空交互学习模块&#xff08;Spatiotemporal Interactive Learning Module&#xff09; 5.2.2 动态图推理模块&#xff08;Dynamic Graph Inference…

哪些代码是 Code Review 中的大忌?—— 以 Python 为例

Code Review 首要达成的结果是更好的可读性。 在此基础上才是进一步发现项目的 Bug、处理性能优化上的问题。 因为&#xff0c;编码是给人看的&#xff0c;不是给计算机&#xff08;Coding for human, NOT computer&#xff09;。 一. 滥用缩写命名 Overusing abbreviation …

软件工程:黑盒测试等价分类法相关知识和多实例分析

目录 一、黑盒测试和等价分类法 1. 黑盒测试 2. 等价分类法 二、黑盒测试等价分类法实例分析 1. 工厂招工年龄测试 2. 规定电话号码测试 3. 八位微机测试 4. 三角形判断测试 一、黑盒测试和等价分类法 1. 黑盒测试 黑盒测试就是根据被测试程序功能来进行测试&#xf…

4_【Linux版】重装数据库问题处理记录

1、卸载已安装的oracle数据库。 2、知识点补充&#xff1a; 3、调整/dev/shm/的大小 【linux下修改/dev/shm tmpfs文件系统大小 - saratearing - 博客园 (cnblogs.com)】 mount -o remount,size100g /dev/shm 4、重装oracle后没有orainstRoot.sh 【重装oracle后没有orains…

【面试突击】并发编程、线程池面试实战

&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308; 欢迎关注公众号&#xff08;通过文章导读关注&#xff1a;【11来了】&#xff09;&#xff0c;及时收到 AI 前沿项目工具及新技术 的推送 发送 资料 可领取 深入理…

2024--Django平台开发-Django知识点(七)

频率超高的问题 Redis的问题虚拟环境mysqlcient和pymysql短信服务&#xff0c;一期用的是腾讯云短信 虚拟环境 可以用来创建虚拟环境的&#xff1a; virtualenv这个模块&#xff0c;简单易上手&#xff0c;推荐 小白不建议&#xff0c;conda&#xff0c;如果大家用这个&…

NSSCTF Round# 16 Basic pwn方向题解

pwn nc_pwnre 没有附件&#xff0c;nc直接连接 给了一段汇编代码&#xff0c;让gpt翻译一下 这段汇编代码是一个循环&#xff0c;它对存储在ebpi位置的字符串进行处理。让我逐步解释一下每个指令的作用&#xff1a;mov eax, [ebpi]: 将ebpi位置的值加载到eax寄存器中。 add e…

【汇编要笑着学】汇编模块化编程 | call和ret调用指令 | jmp跳转指令 | inc自加指令

Ⅰ.汇编模块化编程 0x00 一个简单的例子 我们了解模块化编程前先给出一个例子&#xff0c;方便大家快速了解。 SECTION MBR vstart0x7c00 ; 起始地址编译在0x7c00mov ax,cs mov ds,ax mov es,axmov ss,axmov fs,axmov sp,0x7c00 ; 上面这些都没什…

系列十、Spring Security登录接口添加验证码

一、Spring Security登录接口添加验证码 1.1、概述 一般企业开发中&#xff0c;登录时都会有一个验证码&#xff0c;基于Spring Security的登录接口默认是没有验证码的&#xff1f;那么如何把验证码功能集成到Spring Security的登录接口呢&#xff1f;请看下文&#xff01; 1.…

基于SSM的仓库在线管理系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

C++学习笔记——输入、输出和文件

目录 一、标准输入输出 2.1下面是它们的基本用法 解释 二、格式化输入输出 2.2下面是一个示例 解释 三、文件读写 3.3下面是一个文件读写的示例 解释 四、异常处理和错误检测 4.1下面是一个示例 解释 五、一个实例代码 5.1如何读取 CSV 文件&#xff0c;并计算每…

大厂是怎么做支付系统的流程容错的?

点击下方“JavaEdge”&#xff0c;选择“设为星标” 第一时间关注技术干货&#xff01; 1 单据关联 如某些订单域内部的多种单据间存在关联关系一样&#xff0c;支付设计上也有单据间关联设计。如所有逆向过程都须持有正向的单据&#xff0c;因此退款须关联到原来的支付&#…

LTESniffer:一款功能强大的LTE上下行链路安全监控工具

关于LTESniffer LTESniffer是一款功能强大的LTE上下行链路安全监控工具&#xff0c;该工具是一款针对LTE的安全开源工具。 该工具首先可以解码物理下行控制信道&#xff08;PDCCH&#xff09;并获取所有活动用户的下行链路控制信息&#xff08;DCI&#xff09;和无线网络临时…

为了这口醋,包的这饺子。为了Selenium,学有限的CSS,逐步替换XPATH

Learn about CSS rules and pseudo-classes to help you move your XPATH locators to CSS. 1. 最基本IdElement TypeDirect ChildChild or Sub-ChildClass 2. 深入一点Next SiblingAttribute ValuesChoosing a Specific Match Sub-String Matches 3 参考资料 In order for Sel…

Java零基础教学文档第五篇:jQuery

今日新篇章 【jQuery】 【主要内容】 jQuery简介 jQuery安装 jQuery语法 jQuery选择器 jQuery事件处理 jQueryDOM操作 jQuery元素遍历 jQuery过滤 jQuery其它方法 【学习目标】 1.jQuery简介 1.1 jQuery简介 jQuery 库可以通过一行简单的标记被添加到网页中。 1.…

java自动化将用例和截图一起执行测试放入world中直接生成测试报告【搬代码】

1.首先我们得用例写好之后放入文档中&#xff0c;把不用的案例类型、前置条件去掉之后&#xff0c;如图&#xff1a; 放到桌面后&#xff0c;先看执行结果&#xff1a; 直接上代码 package com.znzdh.qitagongju;import jxl.Sheet; import jxl.Workbook; import org.apache…

了解集群,以及集群是什么?

每个集群即一个独立运行的文档数据库&#xff0c;分片集群架构由路由&#xff08;mongos&#xff09;、配置&#xff08;config&#xff09;和分片&#xff08;shard&#xff09;组成。 数据读写请求经mongos分发&#xff0c;通过查询config信息&#xff0c;并行分配到相应sha…