首页 > 其他分享 >父子组件通信

父子组件通信

时间:2024-04-28 21:59:43浏览次数:19  
标签:default 通信 HelloWorld 父子 export components 组件 store

prop

最常见的组件通信方式之一,由父组件传递到子组件

event

最常见的组件通信方式之一,当子组件发生了某些事,可以通过event通知父组件

styleclass

父组件可以向子组件传递styleclass,它们会合并到子组件的根元素中

示例

父组件

<template>
  <div id="app">
    <HelloWorld
      style="color:red"
      class="hello"
      msg="Welcome to Your Vue.js App"
    />
  </div>
</template>

<script>
import HelloWorld from "./components9/HelloWorld.vue";

export default {
  components: {
    HelloWorld,
  },
};
</script>

子组件

<template>
  <div class="world" style="text-align:center">
    <h1>{{msg}}</h1>
  </div>
</template>

<script>
export default {
  name: "HelloWorld",
  props: {
    msg: String,
  },
};
</script>

渲染结果:

<div id="app">
  <div class="hello world" style="color:red; text-aling:center">
    <h1>Welcome to Your Vue.js App</h1>
  </div>
</div>

attribute

如果父组件传递了一些属性到子组件,但子组件并没有声明这些属性,则它们称之为attribute,这些属性会直接附着在子组件的根元素上

不包括styleclass,它们会被特殊处理

示例

父组件

<template>
  <div id="app">
    <!-- 除 msg 外,其他均为 attribute -->
    <HelloWorld
      data-a="1"
      data-b="2"
      msg="Welcome to Your Vue.js App"
    />
  </div>
</template>

<script>
import HelloWorld from "./components/HelloWorld.vue";

export default {
  components: {
    HelloWorld,
  },
};
</script>

子组件

<template>
  <div>
    <h1>{{msg}}</h1>
  </div>
</template>

<script>
export default {
  name: "HelloWorld",
  props: {
    msg: String,
  },
  created() {
    console.log(this.$attrs); // 得到: { "data-a": "1", "data-b": "2" }
  },
};
</script>

渲染结果:

<div id="app">
  <div data-a="1" data-b="2">
    <h1>Welcome to Your Vue.js App</h1>
  </div>
</div>

子组件可以通过inheritAttrs: false配置,禁止将attribute附着在子组件的根元素上,但不影响通过$attrs获取

natvie修饰符

在注册事件时,父组件可以使用native修饰符,将事件注册到子组件的根元素上

示例

父组件

<template>
  <div id="app">
    <HelloWorld @click.native="handleClick" />
  </div>
</template>

<script>
import HelloWorld from "./components/HelloWorld.vue";

export default {
  components: {
    HelloWorld,
  },
  methods: {
    handleClick() {
      console.log(1);
    },
  },
};
</script>

子组件

<template>
  <div>
    <h1>Hello World</h1>
  </div>
</template>

渲染结果

<div id="app">
  <!-- 点击该 div,会输出 1 -->
  <div>
    <h1>Hello World</h1>
  </div>
</div>

$listeners

子组件可以通过$listeners获取父组件传递过来的所有事件处理函数

v-model

后续章节讲解

sync修饰符

v-model的作用类似,用于双向绑定,不同点在于v-model只能针对一个数据进行双向绑定,而sync修饰符没有限制

示例

子组件

<template>
  <div>
    <p>
      <button @click="$emit(`update:num1`, num1 - 1)">-</button>
      {{ num1 }}
      <button @click="$emit(`update:num1`, num1 + 1)">+</button>
    </p>
    <p>
      <button @click="$emit(`update:num2`, num2 - 1)">-</button>
      {{ num2 }}
      <button @click="$emit(`update:num2`, num2 + 1)">+</button>
    </p>
  </div>
</template>

<script>
export default {
  props: ["num1", "num2"],
};
</script>

父组件

<template>
  <div id="app">
    <Numbers :num1.sync="n1" :num2.sync="n2" />
    <!-- 等同于 -->
    <Numbers
      :num1="n1"
      @update:num1="n1 = $event"
      :num2="n2"
      @update:num2="n2 = $event"
    />
  </div>
</template>

<script>
import Numbers from "./components/Numbers.vue";

export default {
  components: {
    Numbers,
  },
  data() {
    return {
      n1: 0,
      n2: 0,
    };
  },
};
</script>

$parent$children

在组件内部,可以通过$parent$children属性,分别得到当前组件的父组件和子组件实例

$slots$scopedSlots

  • $slots:用于访问父组件传递的普通插槽中的vnode
  • $scopedSlots:用于访问父组件传递的所有用于生成vnode的函数(包括默认插槽在内)

ref

父组件可以通过ref获取到子组件的实例

跨组件通信

ProvideInject

示例

// 父级组件提供 'foo'
var Provider = {
  provide: {
    foo: 'bar'
  },
  // ...
}

// 组件注入 'foo'
var Child = {
  inject: ['foo'],
  created () {
    console.log(this.foo) // => "bar"
  }
  // ...
}

详见:https://cn.vuejs.org/v2/api/?#provide-inject

router

如果一个组件改变了地址栏,所有监听地址栏的组件都会做出相应反应

最常见的场景就是通过点击router-link组件改变了地址,router-view组件就渲染其他内容

vuex

适用于大型项目的数据仓库

store模式

适用于中小型项目的数据仓库

// store.js
const store = {
  loginUser: ...,
  setting: ...
}

// compA
const compA = {
  data(){
    return {
      loginUser: store.loginUser
    }
  }
}

// compB
const compB = {
  data(){
    return {
      setting: store.setting,
      loginUser: store.loginUser
    }
  }
}

eventbus

组件通知事件总线发生了某件事,事件总线通知其他监听该事件的所有组件运行某个函数

标签:default,通信,HelloWorld,父子,export,components,组件,store
From: https://www.cnblogs.com/shmillly959/p/18164560

相关文章

  • Angular cli 组件和服务的创建, 父传子,子传父,服务的简单使用
    1:Angularcli创建组件componentnggcomponentcomponents\rightnggcwave简写需要定位到根路径下即可创建组件CouldnotfindanNgModule.Usetheskip-importoptiontoskipimportinginNgModule.PSC:\myAngulrDemos\20240428demo\mydemo01\src>cd..PSC......
  • 组件的使用、父子通信、ref属性(父子通信)、动态组件、 keep-alive、插槽
    【组件的使用】1<!DOCTYPEhtml>2<htmllang="en">3<head>4<metacharset="UTF-8">5<title>Title</title>6<scriptsrc="https://cdn.jsdelivr.net/npm/vue/dist/vue.js">&......
  • 图文解说ChinaCock日期组件CCDateTimePicker(二)
    上文,介绍了CCDateTimePicker基本用法,实现日期、时间等各种日期格式的输入,用法简单,代码简洁。能不能用这个控件,来实现自定义的输入格式呢?答案是能。比如:我的需要求就遇到这样的情况,用户要选择星期几的方式,如下图,是已经实现的结果: 接下来看看如何实现的?第一步,先定义一个数组: ......
  • XMU《计算机网络与通信》第二次实验报告
    实验二实验报告一、个人信息姓名:XXX学号:XXXXXXXXXXXXXX二、实验目的学习捕获和分析网络数据包掌握以太网MAC帧、802.11数据帧和IPv4数据包的构成,了解各字段的含义掌握ICMP协议,ping和tracert指令的工作原理掌握ARP协议的请求/响应机理三、实验内容与结果分析......
  • XMU《计算机网络与通信》第四次实验报告
    计算机网络实验四通信这次实验的话,我的报告参考意义不大,毕竟这次实验的主要难点是完成那两个代码,但是我报告中没有任何对于代码的解释。大家如果需要的话,我的两个代码可以在这里下载,仅供参考:点击下载。一、个人信息姓名:XXX学号:XXXXXXXXXXXXXX二、实验目的理解和掌握ARP......
  • XMU《计算机网络与通信》第五次实验报告
    实验五运输层与应用层协议分析如果需要Wireshark捕获到的数据,可以在这里下载,这里面应该还有最后一个任务的两个代码:点击下载。目录实验五运输层与应用层协议分析一、个人信息二、实验目的三、实验内容、步骤与结果任务一TCP正常连接观察任务二异常传输观察分析1.尝试连......
  • [Java]线程生命周期与线程通信
    【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权)https://www.cnblogs.com/cnb-yuchen/p/18162522出自【进步*于辰的博客】线程生命周期与进程有诸多相似,所以我们很容易将两者关联理解并混淆,一些细节之处确有许多不同,因为线程调度与进程调度虽都由CPU完成,但两者并......
  • 【Qt 专栏】DateTime日期时间组件
    本文转载自:https://cloud.tencent.com.cn/developer/article/2371799本章将重点介绍QDateTime日期与时间组件的常用方法及灵活运用。 在Qt中,日期和时间的处理通常使用QDateTime类。QDateTime是一个用于表示日期和时间的类,而与之相关的组件还包括QDate、QTime以及QDateTi......
  • 【网络通信】一文读懂网络应用层常见协议的区别(HTTP 、HTTPS、MQTT、FTP、RTSP、RTMP)
        应用层协议是计算机网络中至关重要的组成部分,它们定义了应用程序如何与网络进行交互,实现数据的传输、接收和处理。本文将重点介绍几种常见的应用层协议:HTTP、HTTPS、MQTT、FTP、RTSP和RTMP,分析它们的特点、区别、工作原理以及应用场景。一、HTTP协议      ......
  • React 《组件间通信》
    React组件通信概念:组件通信就是组件之间的数据传递,根据组件嵌套关系的不同,有不同的通信手段和方法A-B父子通信B-C兄弟通信A-E跨层通信父子通信-父传子基础实现实现步骤父组件传递数据-在子组件标签上绑定属性子组件接收数据-子组件通过props参数接收数据......