首页 > 其他分享 >vue的通讯方式

vue的通讯方式

时间:2023-10-25 20:44:32浏览次数:27  
标签:vue const 方式 refs list 通讯 组件 emit

vue中通讯方式

  • props
  • emit
  • v-model
  • refs
  • provide/inject
  • eventBus
  • Vuex/pinia(vue3)
1. Props方式 父组件以数据绑定的形式声明要传递的数据,子组件通过defineProperty()方法创建props对象,即可拿到父组件传来的数据,该方式用于父传子。   父组件的template中:
<!-- list是我们要传递的数据 -->
<child-components :list="list"></child-components>
子组件:
<template>
  <ul>
    <li v-for="i in props.list" :key="i">{{ i }}</li>
  </ul>
</template>
<script setup>
import { defineProps } from 'vue'
const props = defineProps({
  list: {
    type: Array,
    default: () => [],
  },
})
</script>
2. emit方式 emit方式也是Vue中最常见的组件通信方式,该方式用于子传父; 父组件的template中:
<!-- add是子组件要传递的动作,handleAdd是监听到之后执行的事件 -->
<child-components @add="handleAdd"></child-components>
<script>
const list = ref([1,2,3])
const handleAdd = value => {
  list.value.push(value)
}
</script>
子组件中:
const emits = defineEmits(['add'])
emits('add', 1)
3. v-model方式 v-model不能严格成为数据的传递方式,其实只是减少了代码量。
<ChildComponent v-model:list="list" />
// 等价于
<ChildComponent :list="pageTitle" @update:list="list = $event" />
子组件需要emit一个叫update:xxx的事件,再把需要更新的响应式数据传给emit方法的第二个参数即可,如:
const emits = defineEmits(['update:list'])
emits('update:list', arr)
4、Refs 有时候想访问refs绑定的组件的属性或者方法 ,我们会使用refs绑定的组件的属性或者方法,我们会使用refs绑定的组件的属性或者方法,我们会使用refs。但是Vue3不同于Vue2,在 Vue3的setup中我们是无法访问到this的,所以我们需要借助一个方法,那就是getCurrentInstance,该方法返回了当前的实例对象。 父组件如下:
<template>
    <div>
        <Child ref="child"></Child>
        <button @click="show">Show Child Message</button>
    </div>
</template>
<script setup>
import { getCurrentInstance } from '@vue/runtime-core';
import Child from './Child.vue';
const currentInstance = getCurrentInstance()
function show() {
    currentInstance.$refs.child.alertMessage()
}
</script>
子组件代码如下:
<template>
    <div>
        <h1>{{ message }}</h1>
    </div>
</template>
<script setup>
import { ref } from '@vue/reactivity';
let message = ref('我是子元素').value
const alertMessage = function () {
    alert(message)
}
defineExpose({
    message,
    alertMessage
})
</script>
注意⚠️,通过<script setup>语法糖的写法,其组件是默认关闭的,也就是说如果是通过$refs或者$parents来访问子组件中定义的值是拿不到的,必须通过defineExpose向外暴露你想获取的值才行。 5. provide/inject provide/inject是 Vue 中提供的一对 API。无论层级多深,API 都可以实现父组件到子孙组件的数据传递。
// 父组件中
provide('list', list.value)
// 子组件中
const list = inject('list')
6. eventBus Vue 3 中移除了 eventBus,但可以借助第三方工具来完成。Vue 官方推荐使用 mitt 或 tiny-emitter。 7. vuex/pinia Vuex(vue2)和 Pinia(vue3) 是 Vue 中的状态管理工具,使用这两个工具可以轻松实现组件通信。

标签:vue,const,方式,refs,list,通讯,组件,emit
From: https://www.cnblogs.com/cjw0217/p/17788082.html

相关文章

  • Vue:watch的多种使用方法
    好家伙, 补了一下watch的多种用法 1.属性:方法(最常用)使用最广泛的方式是将watch选项设置为一个对象,对象的属性是要观测的数据属性,值是一个回调函数,该回调函数会在属性变化时触发。例如:watch:{firstName:function(newVal,oldVal){console.log('firstNamec......
  • 配置第一个vue项目
    基础环境准备参考:https://www.cnblogs.com/lelexiong/p/17787970.html1、打开vscode终端,配置脚手架vue-clinpminstall-gvue-cli2、安装webpack,它是打包js的工具npminstall-gwebpack3、vscode打开所创建的空文件夹,执行命令创建项目vueinitwebpackvue-demo4......
  • vue el-select 下拉菜单 数据回显不在清除数据可编辑状态
    思路:当点击options的时候,让select失去焦点(跳到其他的地方),添加el-input就是为了把光标跳转到其上面,然后将其隐藏掉,则为看不到光标点,但是在点击第一次之后获取焦点focus之后,隐藏掉下拉菜单的时候@blur是无效的,此时只能通过监听下拉框是否是隐藏和显示状态来让其失去焦点事件,所以......
  • 使用 content scripts 和 Vue Router 等技术在当前页面中注入和显示 Vue 单文件组件
    要在当前页面中注入和显示Vue单文件组件,您需要按照以下步骤操作:创建一个Vue项目:首先,确保您有一个Vue项目,包括您的Vue单文件组件以及相应的构建配置。将构建后的文件添加到插件目录:将Vue项目构建后生成的HTML、CSS和JavaScript文件添加到您的Chrome插件的目录中。编......
  • 【前端开发】基于vue+elemnt-ui流程图设计器解决方案
    前言越来越多的企业都在研发低代码平台,其中流程引擎是核心之一,拥有一个可以拖拽设计审批流程的设计器是相当重要的。介绍审批流程设计器是一种工具,用于创建和设计审批流程。它通常是一个可视化的设计器界面,可以方便地添加和配置审批节点、终审节点、消息节点等,并能够通过连线将......
  • flask整合rabbitMQ插件的方式
    文章目录二、Python-flask-rabbitMQ-插件方式整合引言具体步骤1安装依赖:2编写实体类:3编写消费者和生产者:4初始化消费者和生产者:5其他地方使用生产者二、Python-flask-rabbitMQ-插件方式整合引言当今互联网应用的高并发场景下,如何保证可靠的消息传递和高效的处理成为了一项重......
  • 由遍历二维数组的方式引出缓存内存cpu
    对于二维数组,想要遍历的话,一行一行读和一列一列都读可以,但是大多数情况都选择一行一行,为什么呢?涉及到一个缓存的概念,一般都是cpu去计算,它会先去缓存找,如果找不到才去内存,先说缓存,一般缓存就是类似于一行一行,有个临近效应,顺便把旁边的也读了,十分方便,这就是缓存,入股一列一列,读完......
  • 由于正则表达式的匹配顺序,这个例子可能并不会按照你期望的方式工作。正则表达式会从左
    在Python中,你可以使用re模块的sub函数来替换字符串中的特定字符或字符串。以下是一个示例,它将字符串中的'a'、'b'和'ab'替换为'c':importres='abracadabra's=re.sub('a|b|ab','c',s)print(s)#打印替换后的字符串在这个例子中,'a|b|ab'是一个正则表......
  • Vue日历插件
    <template><divclass="page"><divclass="calendar"><divstyle="display:flex;justify-content:space-between;align-items:center;border:1pxsol......
  • nRF52840 SYSTEM OFF模式下唤醒的唤醒方式
    参考spec上的说明,唤醒源有5个。分别是:1.GPIO外设发出的DETECT信号2.LPCOMP模块发出的ANADETECT信号3.NFC模块发出的SENSE信号4.USB模块VBUSpin出现有效电压时5.给复位管脚一个信号供参考示例在如下工程中,NCS示例有待再发现\nRF5_SDK_17.1.0\examples\peripheral......