首页 > 其他分享 >[vue3]组件通信

[vue3]组件通信

时间:2024-06-16 13:59:09浏览次数:21  
标签:vue const 通信 vue3 组件 path ref 属性

自定义属性

父组件中给子组件绑定属性, 传递数据给子组件, 子组件通过props选项接收数据

props传递的数据, 在模版中可以直接使用{{ message }}, 在逻辑中使用props.message

defineProps

defineProps是编译器宏函数, 就是一个编译阶段的标识, 实际编译器解析时, 遇到后会进行编译转换

自定义事件

父组件中给子组件标签绑定自定义事件, 子组件通过emit方法触发事件, 传递数据给父组件

模版引用

通过ref标识获取真实的DOM对象或者组件实例对象, 叫做模版引用

获取DOM对象

import {ref} from 'vue'
//1,生成一个ref对象 
const inp = ref(null)
//2,绑定ref标识
<input ref='inp' />
//3,访问ref对象
onMounted(() => {
  注意: 操作DOM需要组件完毕
  console.log(inp.value)
})

获取组件实例

import {ref} from 'vue'
const sun = ref(null)
onMounted(() => {
  // 注意: 组件挂载完毕
  // 获取组件属性
  console.log(sun.value.属性)
  // 调用组件方法
  console.log(sun.value.方法())
})
<sun ref="sun"><sun>

defineExpose

setup语法糖下 组件内部的属性和方法 是不开放的, 需要通过defineExpose编译宏暴漏组件的属性和方法

provide()和inject()

可以方便的跨层级传递数据和方法

场景

1.0传递普通数据

顶层组件通过provide函数提供数据, 底层组件通过inject函数获取数据

2.0传递响应式数据

3.0传递方法

顶层组件可以向底层组件传递方法, 底层组件调用顶层组件的方法, 就可以实现修改数据

defineModel

在vue3中, 自定义组件上使用v-model. 相当于传递modelValue属性, 触发 update:modelValue 事件

先要定义props, 再定义emits, 其中有许多重复代码,如果修改值, 还需要手动调用emit函数

<Child v-model="text">
等同于
<Child :modelValue="text"  @update:modelValue=" text = $event " >
defineProps({
  modelValue: String
})
const emit = defineEmits(['update:modelValue'])
  
<input
  type="text"
  :value="modelValue"
  @input="e => emit('update:modelValue', e.target.value)"  
>

defineModel

使用新的函数(实验阶段)简化代码

<Child v-model="text">
import {defineModel} from 'vue'
const modelValue = defineModel()
  
<input
  type="text"
  :value="modelValue"
  @input="modelValue = e.target.value"  
>
export default defineConfig({
  plugins: [
    vue({
      script: {
        // 开启支持
        defineModel: true
      }
    }),
  ],
})

全局变量

vue2

设置

语法: Vue.prototype.属性名 = 属性值

Vue.prototype.$echarts = echarts

读取

语法: this.属性名

<template> 
  this.$echarts.init()
</script>

vue3

设置

语法: app.config.globalProperties.属性名 = 属性值

import { createApp } from 'vue'; 
import App from './App.vue'; 
const app = createApp(App); 
// 假设您已经验证了 URL 结构并确定要提取的部分 
const path = window.location.href.split("/")[5] || 'default-path'; 
app.config.globalProperties.$path = path; 
app.mount('#app');

读取

语法: const 变量 = getCurrentInstance()?.appContext.config.globalProperties.属性名

<template> 
  <div>当前路径是:{{ path }}</div> 
</template> 
  
<script>
import { getCurrentInstance, ref, onMounted } from 'vue'; 
export default { 
  setup() { 
    const path = ref(null); 
    onMounted(() => { 
      const instance = getCurrentInstance(); 
      if (instance) { 
        path.value = instance.appContext.config.globalProperties.$path;
      } 
    });
    return { path }; 
  }, 
}; 
</script>

标签:vue,const,通信,vue3,组件,path,ref,属性
From: https://blog.csdn.net/CSDN20221005/article/details/139719638

相关文章

  • 使用Modbus转Profinet网关无需编写Modbus轮询程序,实现PLC和电表通信
    一、无需编写Modbus轮询程序实现PLC与电表通信的方法在工业自动化领域,PLC(可编程逻辑控制器)与电表之间的通信是非常常见的需求。传统上,为了让PLC与电表进行通信,通常需要编写Modbus轮询程序来实现数据的读取和控制。然而,近年来出现了一种新的方法,即通过使用Modbus转Profinet网关,可......
  • 浅谈网络通信(3)
    文章目录一、TCP[!]1.1、TCP协议报文格式1.2、TCP十大机制1.2.1、确认应答机制1.2.2、超时重传机制1.2.3、连接管理机制1.2.3.1、三次握手[其流程至关重要,面试必考]1.2.3.2.1、那为啥要建立连接??建立连接的意义是啥??1.2.3.2、四次挥手1.2.4、滑动窗口机制1.2.5、流量控制......
  • CLFS驱动程序(clfs.sys)是Windows操作系统中的一个组件,它提供了日志记录和恢复功能,以增
    clfs.sys是Windows操作系统中的一个系统文件,它是CLFS(CommonLogFileSystem)驱动程序的一部分。CLFS是Windows操作系统中用于管理日志文件的文件系统,它提供了日志记录和恢复功能。CLFS驱动程序(clfs.sys)具有以下功能和作用:日志记录:CLFS可以记录系统的操作、事件和错误等信息到......
  • Vue3动态组件的基本用法
     和Vue2动态组件写法不同的是,:is传递的内容需要先定义,再给:is使用<template><div><component:is="currentComponent"></component></div></template><scriptsetup>importMyComponentfrom'./MyComponent.vue';......
  • 这个vue3的后台管理系统虽然简洁但不简单
    今天介绍一个新的Vue后台管理框架,相比其他后台功能丰富管理系统,这个后台管理系统可以用干净简洁来形容——Nova-admin Nova-adminNova-admin 是一个基于Vue3、Vite5等最新技术的后台管理平台。用简单的方式实现完整功能,并尽可能的考虑代码规范,易读易理解无过度封装,方便二次......
  • vue3生命周期
    Vue3中有两个注册生命周期的方法,第一个是选项式的API风格,另一个的组合式的API风格。Vue3的生命周期完全兼容Vue2的生命周期。生命周期选项可以和组合式API中的生命周期钩子混合使用,不过最好不要将两者混合使用。生命周期的实现原理其实就是先将用户注册的生命周......
  • 通过Vue3+高德地图的JS API实现市区地图渲染
    效果图:核心代码:<scriptsetup>import{onMounted,onUnmounted}from'vue';importAMapLoaderfrom'@amap/amap-jsapi-loader';import{message}from'ant-design-vue';importschoolfrom'@/assets/icons/school......
  • 虚拟化 之一 详解 jailhouse 架构及原理、软硬件要求、源码文件、基本组件
      Jailhouse是一个基于Linux实现的针对创建工业级应用程序的小型Hypervisor,是由西门子公司的JanKiszka于2013年开发的,并得到了官方Linux内核的支持,在开源社区中获得了知名度和吸引力。Jailhouse  Jailhouse是一种轻量级的虚拟化技术,可以将多个操作系统(或......
  • PS通过GTX实现SFP网络通信2
    PS程序设计LWIP库修改 修改原因SDK2017.4自带的LWIP1.4.1库的版本为2.0,直接使用该库将无法通过SFP实现网络通信。因此需要进行修改。修改的原因有2个,第1个原因是由于2017.4版本产生的新bug。在2015.4版本中,若PL部......
  • PS通过GTX实现SFP网络通信1
    将PSENET1的GMII接口和MDIO接口通过EMIO方式引出。在PL端将引出的GMII接口和MDIO接口与IP核1G/2.5GEthernetPCS/PMAorSGMII连接,1G/2.5GEthernetPCS/PMAorSGMII通过高速串行收发器GTX与MIZ7035/7100开发板的SFP......