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

yizhihongxing

下面为您详细讲解“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日

相关文章

  • Vue的缓存方法示例详解

    Vue的缓存方法示例详解 Vue.js 是一款优秀的 JavaScript 前端框架,提供了大量的工具和组件,使得开发者更加便捷和高效地构建 Web 应用程序。其中,缓存方法是 Vue.js 中一个非常重要的特性,可以大幅提升应用程序的性能和用户体验。本文将详细介绍 Vue 缓存方法的应用和示例,主要包括:内置缓存方法、手动缓存方法、路由缓存方法、组件缓存方…

    Vue 2023年5月27日
    00
  • 图文详解vue框架安装步骤

    图文详解Vue框架安装步骤 1. 确认运行环境 在安装Vue框架之前,需要先确认已经安装了node.js,并且其版本号为6以上。 可以通过以下命令来检查node.js的版本: node -v 如果确认已经安装了node.js,那么就可以继续进行后续的操作了。 2. 安装Vue CLI Vue CLI是专门用于Vue开发的脚手架工具,可以快速搭建Vue项目。 …

    Vue 2023年5月28日
    00
  • Vue项目部署上线全过程记录(保姆级教程)

    非常感谢您对Vue项目上线过程的关注。以下是我整理的“Vue项目部署上线全过程记录(保姆级教程)”的详细攻略。 确认服务器环境在开始之前,请确保您已经购买了云服务器,在服务器上安装好操作系统和需要的软件环境。推荐使用Linux系统,并保证服务器具备如下配置: 操作系统:CentOS 7/Ubuntu 14.04及以上版本; CPU:1核及以上; 内存:2GB…

    Vue 2023年5月28日
    00
  • vue 如何将二维数组转化为一维数组

    将二维数组转化为一维数组可以使用 Javascript 的数组方法 flat()。而在 Vue 中,可以使用计算属性来获取转换后的一维数组。 计算属性是一个用来计算 Vue 实例数据的属性,可以基于其它数据进行计算得出。在 Vue 实例中使用计算属性时,只要该计算属性所依赖的数据发生了变化,该计算属性就会重新计算。因此,我们可以使用计算属性来获取每次更新数组…

    Vue 2023年5月28日
    00
  • vue2.x数组劫持原理的实现

    来详细讲解一下“vue2.x数组劫持原理的实现”的完整攻略。 什么是vue2.x数组劫持 在vue2.x中,当我们使用Vue实例化一个对象时,如果这个对象是一个数组,那么Vue会对这个数组进行劫持,也就是我们所说的“数组响应式”。 所谓的“数组响应式”,就是指当我们对数组进行增、删、改、查等操作时,Vue会自动识别这些变化,并及时地更新视图。 数组劫持原理的…

    Vue 2023年5月29日
    00
  • 在vue中使用vant TreeSelect分类选择组件操作

    下面是关于在vue中使用vant TreeSelect分类选择组件的详细攻略。 1. 安装vant 首先,我们需要安装vant组件库,可以使用npm或yarn来安装,命令如下: npm install vant -S // 使用npm yarn add vant // 使用yarn 2. 引入需要使用的TreeSelect组件 在需要使用组件的.vue文件中…

    Vue 2023年5月28日
    00
  • 关于js的事件循环机制剖析

    关于js的事件循环机制,我们知道JavaScript是一种单线程的语言,也就是说JavaScript中的代码是按照顺序执行的,遇到耗时的任务会阻塞主线程,导致页面卡顿甚至崩溃。但是JavaScript又有很多需要异步执行,比如Ajax请求、定时器等。所以JavaScript的事件循环机制就应运而生。 事件循环机制的概念 事件循环机制是一个非常重要的概念,它是…

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

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

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