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日

相关文章

  • vue的组件通讯方法总结大全

    我来为你详细讲解一下“Vue的组件通讯方法总结大全”的完整攻略。 1. 组件通讯方法概述 在Vue的组件化开发中,组件之间的通讯是必不可少的。Vue提供了多种组件通讯方法,包括: 父子组件通讯:父组件通过props向子组件传递数据,子组件通过emit触发事件向父组件传递数据。 兄弟组件通讯:通过一个共同的父组件来实现兄弟组件通讯,即父组件先接收兄弟组件的数据…

    Vue 2023年5月27日
    00
  • Vue路由传参详细介绍

    让我们来详细讲解 “Vue路由传参详细介绍”的完整攻略。 Vue路由传参的方式 Vue Router 提供了多种传参的方式: 动态路由传参 查询参数传参 props传参 这三种方式各有优缺点,下面我们逐个介绍。 1. 动态路由传参 动态路由传参是通过路由配置中的参数来传递数据的方式。例如: const router = new VueRouter({ rou…

    Vue 2023年5月27日
    00
  • vue3 hook重构DataV的全屏容器组件详解

    针对“vue3 hook重构DataV的全屏容器组件详解”这篇文章,我可以提供以下详细的攻略: 一、背景 这篇文章主要介绍了如何使用 Vue3 的 hook 函数来重构 DataV 的全屏容器组件,以提升代码的可读性和维护性。文章以具体的代码实现为例,从技术层面深入讲解了 hook 函数的运用和优势,包括重构前后的组件结构、组件内部使用的 hook 函数等。…

    Vue 2023年5月28日
    00
  • element日期选择器el-date-picker样式图文详解

    标题 element日期选择器样式图文详解 简介 element日期选择器(el-date-picker)是一款常用的日期选择器组件,可用于各类web应用中。本文将详细讲解该组件的各种样式,以便对该组件的使用和美化提供帮助。 el-date-picker基础样式 el-date-picker组件可以设置的样式非常丰富,整体样式可以通过el-date-pick…

    Vue 2023年5月29日
    00
  • vue中jsonp插件的使用方法示例

    下面是“vue中jsonp插件的使用方法示例”的完整攻略。 1. 什么是JSONP JSONP,全称为“JSON with Padding”,是一种用于解决跨域请求的技术。在同源策略的限制下,通过script标签的src属性发送请求,服务器返回一段被包裹在回调函数中的JSON数据,然后前端将其解析并使用。 2. JSONP插件在Vue中的使用方法 在Vue中…

    Vue 2023年5月28日
    00
  • Vue2.5通过json文件读取数据的方法

    以下是Vue2.5通过JSON文件读取数据的完整攻略。 准备工作 首先,我们需要准备好一个存储数据的JSON文件。 比如,我们准备好了一个叫做data.json的文件,里面存储了如下数据: { "name": "Vue2.5", "version": "2.5.22", &quo…

    Vue 2023年5月28日
    00
  • Vue3.0插件执行原理与实战

    下面我将为你详细讲解“Vue3.0插件执行原理与实战”的完整攻略。 前言 在Vue.js 3.0中,插件的执行原理发生了一些变化。在Vue.js 2.0中,插件是通过在Vue构造函数上调用静态方法来注册的。但是在Vue.js 3.0中,插件的注册方式更加灵活,可以通过调用应用程序实例上的方法来注册插件。 本文将详细讲解Vue.js 3.0插件的执行原理,并提…

    Vue 2023年5月28日
    00
  • Vue中computed(计算属性)和watch(监听属性)的用法及区别说明

    下面是关于“Vue中computed(计算属性)和watch(监听属性)的用法及区别说明”的完整攻略。 1. computed(计算属性) computed是一种在Vue中用于计算属性的方法,它一般用于需要进行复杂计算的场景。computed其实是一个类似于getter/setter的方法,当它所依赖的值发生改变时,它才会重新计算。 computed示例代码…

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