vue 父子组件通信

简介: vue 父子组件通信

文章目录

大家好,我是夏小花

下面是关于vue中父子组件通信案例,首先是父组件向子组件传递数据,然后子组件向父组件进行传递数据,代码中有序号标注的步骤,以及我画的一张逻辑图,结合代码去理解通信原理以及父子通信流程。


上干货

代码比较长,注释可能会有些乱,注意看下具体步骤,看不明白的私信!!!

首先这边我是通过在vue官网直接下载vue.js,直接引入到代码中;

共分为7步,父组件传递子组件进行动态绑定input—>当子组件input发生改变时子组件发布事件—>父组件进行事件监听从而实现双向绑定

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
<!-- 父组件模板 -->
<div id="app">
  <!-- 7.父组件监听子组件发射的事件,进行双向绑定
        双向绑定父组件和子组件进行相互通信:number1="num1"-->
  <cpn :number1="num1"
       :number2="num2"
       @num1change="num1change"
       @num2change="num2change"/>
</div>
<!-- 子组件模板 -->
<template id="cpn">
  <div>
    <!-- 显示父组件传来的值 -->
    <h2>props: {{number1}}</h2>
    <h2>data: {{dnumber1}}</h2>
    <!--<input type="text" v-model="dnumber1">-->
    <!-- :value 实现双向绑定
      @input当用户输入内容进行改变时,num1Input监听事件方法-->
    <input type="text" :value="dnumber1" @input="num1Input">
    <h2>props: {{number2}}</h2>
    <h2>data: {{dnumber2}}</h2>
    <!--<input type="text" v-model="dnumber2">-->
    <!--
        :value="dnumber2实现双向绑定
          @input当用户输入内容进行改变时,num2Input监听事件方法-->
    <input type="text" :value="dnumber2" @input="num2Input">
  </div>
</template>
<script src="../JS/vue.js"></script>
<script>
  const app = new Vue({
    el: '#app',
    // 1.Vue实例中定义两个属性: num1和num2
    data: {
      num1: 1,
      num2: 0
    },
    //实现事件方法
    methods:  {
      num1change(value){
        this.num1 = parseInt(value);
      },
      num2change(value){
        this.num2 = parseInt(value);
      }
  },
    //注册组件
    components: {
      cpn: {
        template: `#cpn`,
        // 2.子组件定义两个属性,接收父组件传来的值: num1和num2
        props: {
          number1: Number,
          number2: Number
        },
        // 3.将number1和number2赋值给dnumber1和dnumber2进行初始化,用来对input进行双向绑定
        data(){
          return {
            dnumber1: this.number1,
            dnumber2: this.number2
          }
        },
        // 4.定义methods,处理函数,处理num1Input事件
        methods: {
          num1Input(event){
            //当子组件文本框值改变时,父组件中的值也进行改变
            // 5.当input中的值发生改变时,将input的值赋值到dnumber1进行双向绑定
            this.dnumber1 = event.target.value;
            // 6.改变父组件值时(子组件向父组件传值),发布事件
            this.$emit('num1change',this.dnumber1);
            // 当input1中的值发生改变时,input2中的值(dnumber2)的倍数*100进行显示
            this.dnumber2 = this.dnumber1 * 100;
            //改变父组件值时(子组件向父组件传值),发布事件
            this.$emit('num2change',this.dnumber2)
          },
          //处理num2Input事件
          num2Input(event){
            //当父组件文本框值改变时,子组件中的值也进行改变
            //当input中的值发生改变时,将input的值赋值到dnumber2进行双向绑定
            this.dnumber2 = event.target.value;
            //改变父组件值时(子组件向父组件传值),发布事件
            this.$emit('num2change',this.dnumber2);
            // 当input2中的值发生改变时,input1中的值(dnumber2)的倍数/100进行显示
            this.dnumber1 = this.dnumber2 / 100;
            //3.同时修饰dnumber2的值
            this.$emit('num1change',this.dnumber1)
          }
        }
      }
    }
  })
</script>
</body>
</html>

运行截图

4edc953e2c684bbe819ffa954c899c08.png

流程图

4edc953e2c684bbe819ffa954c899c08.png

后期我会将vue组件化知识点,陆续分享到我的博客中。

目录
相关文章
|
4天前
|
存储 数据采集 供应链
属性描述符初探——Vue实现数据劫持的基础
属性描述符还有很多内容可以挖掘,比如defineProperty与Proxy的区别,比如vue2与vue3实现数据劫持的方式有什么不同,实现效果有哪些差异等,这篇博文只是入门,以后有时间再深挖。 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
4天前
|
数据采集 资源调度 JavaScript
极致的灵活度满足工程美学:用Vue Flow绘制一个完美流程图
本文介绍了使用 Vue Flow 绘制流程图的方法与技巧。Vue Flow 是一个灵活强大的工具,适合自定义复杂的流程图。文章从环境要求(Node.js v20+ 和 Vue 3.3+)、基础入门案例、自定义功能(节点与连线的定制、事件处理)到实际案例全面解析其用法。重点强调了 Vue Flow 的高度灵活性,虽然预定义内容较少,但提供了丰富的 API 支持深度定制。同时,文中还分享了关于句柄(handles)的使用方法,以及如何解决官网复杂案例无法运行的问题。最后通过对比 mermaid,总结 Vue Flow 更适合需要高度自定义和复杂需求的场景,并附带多个相关技术博客链接供进一步学习。
|
14天前
|
JavaScript 前端开发 算法
vue渲染页面的原理
vue渲染页面的原理
|
1月前
|
JavaScript 前端开发 开发者
Vue中的class和style绑定
在 Vue 中,class 和 style 绑定是基于数据驱动视图的强大功能。通过 class 绑定,可以动态更新元素的 class 属性,支持对象和数组语法,适用于普通元素和组件。style 绑定则允许以对象或数组形式动态设置内联样式,Vue 会根据数据变化自动更新 DOM。
|
1月前
|
移动开发 JavaScript API
Vue Router 核心原理
Vue Router 是 Vue.js 的官方路由管理器,用于实现单页面应用(SPA)的路由功能。其核心原理包括路由配置、监听浏览器事件和组件渲染等。通过定义路径与组件的映射关系,Vue Router 将用户访问的路径与对应的组件关联,支持哈希和历史模式监听 URL 变化,确保页面导航时正确渲染组件。
|
缓存 JavaScript 前端开发
Vue Props、Slot、v-once、非父子组件间的传值....
Vue Props、Slot、v-once、非父子组件间的传值....
110 0
|
JavaScript
Vue的非父子组件之间传值
全局事件总线 一种组件间通信的方式,适用于任意组件间通信
105 0
|
JavaScript
Vue中父子组件传值
先在⽗组件中给⼦组件的⾃定义属性绑定⼀个⽗组件的变量
105 0
|
JavaScript
vue 组件传值
vue 组件传值
101 0
|
JavaScript
vue父子组件传值
vue父子组件传值