Vue2和Vue3中常用组件通信用法分享

下面为您详细讲解“Vue2和Vue3中常用组件通信用法分享”的完整攻略。

1. Vue2中常用组件通信方式

在Vue2中,组件通信有以下几种方式:

1. 父子组件传值

通过父组件向子组件传递值,一般使用props属性。

<!-- Child.vue 父子组件传值示例 -->
<template>
  <div>
    {{message}}
  </div>
</template>

<script>
export default {
  props: {
    message: {
      type: String,
      default: ''
    }
  }
}
</script>
<!-- Parent.vue 父子组件传值示例 -->
<template>
  <div>
    <child :message="parentMessage"></child>
  </div>
</template>

<script>
import Child from './Child.vue'

export default {
  components: {
    Child
  },
  data () {
    return {
      parentMessage: 'Hello, child!'
    }
  }
}
</script>

2. 子父组件传值

通过子组件向父组件传递值,一般使用$emit方法。

<!-- Child.vue 子父组件传值示例 -->
<template>
  <button @click="handleClick">Click</button>
</template>

<script>
export default {
  methods: {
    handleClick () {
      this.$emit('pass', 'emit something to parent component')
    }
  }
}
</script>
<!-- Parent.vue 子父组件传值示例 -->
<template>
  <div>
    <child @pass="handlePass"></child>
  </div>
</template>

<script>
import Child from './Child.vue'

export default {
  components: {
    Child
  },
  methods: {
    handlePass (data) {
      console.log(data) // 'emit something to parent component'
    }
  }
}
</script>

3. 非父子组件传值

在Vue2中,使用事件总线进行非父子组件之间的通信。

// EventBus.js 
import Vue from 'vue'
export default new Vue()

// ComponentA.vue 非父子组件传值示例
<script>
import EventBus from './EventBus.js'

export default {
  methods: {
    handleClick () {
      EventBus.$emit('pass', 'emit something to another component')
    }
  }
}
</script>

// ComponentB.vue 非父子组件传值示例
<script>
import EventBus from './EventBus.js'

export default {
  created () {
    EventBus.$on('pass', data => {
      console.log(data) // 'emit something to another component'
    })
  }
}
</script>

2. Vue3中常用组件通信方式

在Vue3中,组件通信有以下几种方式:

1. 父子组件传值

同Vue2,通过父组件向子组件传递值,一般使用props属性。

<!-- Child.vue 父子组件传值示例 -->
<template>
  <div>
    {{message}}
  </div>
</template>

<script>
import { defineProps } from 'vue'
export default {
  props: {
    message: {
      type: String,
      default: ''
    }
  }
}
</script>
<!-- Parent.vue 父子组件传值示例 -->
<template>
  <div>
    <child :message="parentMessage"></child>
  </div>
</template>

<script>
import Child from './Child.vue'

export default {
  components: {
    Child
  },
  data () {
    return {
      parentMessage: 'Hello, child!'
    }
  }
}
</script>

2. 子父组件传值

同Vue2,通过子组件向父组件传递值,一般使用$emit方法。

<!-- Child.vue 子父组件传值示例 -->
<template>
  <button @click="handleClick">Click</button>
</template>

<script>
import { defineEmits } from 'vue'
export default {
  emits: {
    pass: data => typeof data === 'string' 
  },
  methods: {
    handleClick () {
      this.$emit('pass', 'emit something to parent component')
    }
  }
}
</script>
<!-- Parent.vue 子父组件传值示例 -->
<template>
  <div>
    <child @pass="handlePass"></child>
  </div>
</template>

<script>
import Child from './Child.vue'

export default {
  components: {
    Child
  },
  methods: {
    handlePass (data) {
      console.log(data) // 'emit something to parent component'
    }
  }
}
</script>

3. 非父子组件传值

在Vue3中,使用provideinject实现非父子组件之间的通信。

<!-- Provider.vue 非父子组件传值示例 -->
<template>
  <div>
    <button @click="handleClick">Click</button>
    <slot></slot>
  </div>
</template>

<script>
import { provide } from 'vue'
export default {
  setup () {
    const context = 'this is provider context'
    provide('context', context)
  },
  methods: {
    handleClick () {
      //...
    }
  }
}
</script>
<!-- Consumer.vue 非父子组件传值示例 -->
<template>
  <div>
    {{ context }}
  </div>
</template>

<script>
import { inject, reactive } from 'vue'
export default {
  setup () {
    const state = reactive({ context: '' })
    const context = inject('context')
    state.context = context
    return { state }
  }
}
</script>

以上就是Vue2和Vue3中常用组件通信用法的分享。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Vue2和Vue3中常用组件通信用法分享 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • Vue3中vuex的基本使用方法实例

    本文将以「Vue3中vuex的基本使用方法实例」为主题,为大家详细讲解Vue3中vuex的使用方法和操作流程。 先决条件 Vue3和Vuex是本文所需使用的前置知识,如果你还不熟悉这两个技术,你需要先掌握它们。 安装 Vuex 首先,我们需要安装 Vuex 。您可以通过运行以下命令来安装该软件包: npm install vuex@next 创建 Vuex …

    Vue 2023年5月27日
    00
  • vue中用 async/await 来处理异步操作

    下面是关于 Vue 中如何使用 async/await 来处理异步操作的完整攻略,具体内容如下: 什么是 async/await async 和 await 是 ECMAScript 2017 中引入的新语法,是用于简化异步操作的一种方式,在 Vue 的开发中也经常用到。其中 async 是声明一个异步函数,await 则是用于等待一个异步函数返回结果。 V…

    Vue 2023年5月29日
    00
  • Vue项目全局配置页面缓存之按需读取缓存的实现详解

    Vue项目全局配置页面缓存之按需读取缓存的实现详解 在Vue项目中,为了提高页面访问速度和用户体验,我们通常需要考虑使用缓存机制。在这篇文章中,我们将讲解如何在Vue项目中使用页面缓存,并实现按需读取缓存的功能。 全局路由配置 Vue项目中,可以使用Vue Router来管理路由。全局路由配置可以在项目的router目录下的index.js文件中进行配置。 …

    Vue 2023年5月28日
    00
  • vue使用websocket概念及示例

    要理解Vue.js如何使用Websocket,我们需要先了解什么是Websocket。Websocket是一种实现全双工通信的协议,它允许浏览器和服务器之间实时通信,而不需要完全依靠HTTP请求响应模式。 接下来,我们将为您介绍如何在Vue.js应用程序中使用Websocket。 步骤1:安装和导入WebSocket应用程序 首先,我们需要安装Websock…

    Vue 2023年5月27日
    00
  • java模拟TCP通信实现客户端上传文件到服务器端

    Java模拟TCP通信实现客户端上传文件到服务器端可以分为以下几个步骤: 建立TCP连接:使用Socket类在客户端建立TCP连接到服务器端。客户端Socket向服务器端发起连接请求,服务器端对请求做出应答,双方建立连接。 示例代码: Socket socket = new Socket(serverIP, serverPort); 发送文件信息:客户端向服…

    Vue 2023年5月28日
    00
  • laravel5.4+vue+element简单搭建的示例代码

    下面详细讲解如何搭建“laravel5.4+vue+element简单搭建的示例代码”,并提供两个示例说明。 准备工作 安装composer 安装laravel5.4 安装npm 安装vue 安装element-ui 搭建步骤 1. 初始化Laravel项目 使用如下命令初始化一个laravel项目: composer create-project –pr…

    Vue 2023年5月28日
    00
  • 关于vue-treeselect的基本用法

    关于 vue-treeselect 的基本用法攻略 vue-treeselect 是一个基于 Vue.js 和 Bootstrap 的无限级树选择器组件,可以用于树形选择和下拉菜单选择。本篇攻略将详细介绍 vue-treeselect 的基本用法,包括组件的基本属性、事件和插槽的使用方法,并提供两个示例说明。 安装 首先,我们需要安装 vue-treesel…

    Vue 2023年5月27日
    00
  • vue 绑定使用 touchstart touchmove touchend解析

    下面是针对“Vue 绑定使用 touchstart touchmove touchend 解析”的解析攻略: 1. 什么是 touch 事件? Touch 事件是指通过触摸用户界面产生的事件,分为三个部分:touchstart、touchmove、touchend。通常用于移动设备上。 2. Vue 绑定 Touch 事件 在 Vue 实例上,可以通过 @t…

    Vue 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部