Vue组件间数据传递的方式(3种)

yizhihongxing

Vue组件间数据传递的方式有以下三种:

1. props 与 events

使用props将数据从父组件传递到子组件,使用events将数据从子组件传递到父组件。

父组件传递数据给子组件

在父组件中,可以通过在子组件中使用props属性传递数据。props属性是一个数组,其中包含子组件中要接收的属性名。

<template>
  <div>
    <child-component :message="msg"></child-component>
  </div>
</template>

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

export default {
  components: { ChildComponent },
  data() {
    return {
      msg: 'Hello World'
    }
  }
}
</script>

在子组件中,可以像这样通过props接收数据。

<template>
  <div>
    {{ message }}
  </div>
</template>

<script>
export default {
  props: {
    message: String
  }
}
</script>

子组件传递数据给父组件

在子组件中,使用$emit方法来触发事件并传递数据。

<template>
  <div>
    <button @click="onClick">Click me!</button>
  </div>
</template>

<script>
export default {
  methods: {
    onClick() {
      this.$emit('button-clicked', 'data from child component')
    }
  }
}
</script>

在父组件中,可以通过v-on指令绑定子组件的事件并接收数据。

<template>
  <div>
    <child-component @button-clicked="onButtonClicked"></child-component>
  </div>
</template>

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

export default {
  components: { ChildComponent },
  methods: {
    onButtonClicked(data) {
      console.log(data) // 'data from child component'
    }
  }
}
</script>

2. $emit 与 $on

使用Vue实例中的$emit方法和$on方法来进行事件的发送和接收。

这种方式的实现和第一种方式类似,只是使用的是Vue实例中的方法。

发送事件

在发送事件的组件中使用$emit方法

<template>
  <div>
    <button @click="onClick">Click me!</button>
  </div>
</template>

<script>
export default {
  methods: {
    onClick() {
      this.$root.$emit('event', 'data from root Vue instance')
    }
  }
}
</script>

接收事件

在接收事件的组件中使用$on方法接收事件

<template>
  <div>
    {{ data }}
  </div>
</template>

<script>
export default {
  data() {
    return {
      data: ''
    }
  },
  mounted() {
    this.$root.$on('event', data => {
      this.data = data
    })
  },
  beforeDestroy() {
    this.$root.$off('event')
  }
}
</script>

3. Vuex

Vuex是Vue.js的官方状态管理工具,可以用于在多个组件之间共享状态。

<template>
  <div>
    <h1>{{ count }}</h1>
    <button @click="increment">Increment</button>
  </div>
</template>

<script>
import {mapState, mapActions} from 'vuex'

export default {
  computed: {
    ...mapState(['count'])
  },
  methods: {
    ...mapActions(['increment'])
  }
}
</script>

在另一个组件中,可以通过dispatch一个action来修改count的值。

<template>
  <div>
    <button @click="increment">Increment another component</button>
  </div>
</template>

<script>
import {mapActions} from 'vuex'

export default {
  methods: {
    ...mapActions(['increment'])
  }
}
</script>

这样,所有使用count的组件都会自动更新。

以上就是Vue组件间数据传递的三种方式,它们各自有不同的应用场景,需要根据具体情况进行选择。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Vue组件间数据传递的方式(3种) - Python技术站

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

相关文章

  • Vue computed计算属性详细讲解

    关于“Vue computed计算属性详细讲解”的攻略,我将从以下几个方面进行详细讲解: 什么是Vue computed计算属性? Vue computed计算属性的使用方法及注意事项 常见的Vue computed计算属性应用场景 1. 什么是Vue computed计算属性? 在Vue中,computed计算属性是一个属性值,它的值是一个函数。这个函数中…

    Vue 2023年5月28日
    00
  • python3实现将json对象存入Redis以及数据的导入导出

    下面是详细的攻略。 1. 安装redis-py 首先需要安装redis-py库,可以通过pip直接安装: pip install redis 2. 创建redis连接对象 接下来需要创建一个redis连接对象,连接Redis服务器。可以通过如下代码创建: import redis redis_host = ‘localhost’ redis_port = 6…

    Vue 2023年5月28日
    00
  • vue watch自动检测数据变化实时渲染的方法

    当Vue实例中的数据发生变化时,自动重新渲染视图是Vue响应式系统中最强大的功能之一。Vue提供了一种名为“watch”的特性,允许我们监测数据变化,当数据发生变化时,执行相应的回调函数。这个特性非常适用于处理异步操作、表单输入以及任何需要在特定数据变化时执行特定操作的情况。 以下是vue watch自动检测数据变化实时渲染的方法的完整攻略: 1. 创建一个…

    Vue 2023年5月29日
    00
  • vue项目网页自适应等比例放大缩小实例代码

    下面是关于 vue 项目网页自适应等比例放大缩小实例代码的详细攻略。 1. CSS3实现 实现网页自适应等比例放大缩小的方式之一是利用 CSS3 的 transform 属性来实现。具体实现步骤如下: 在 head 标签中添加 viewport meta 标签,以适配不同设备。 <head> <meta name="viewpor…

    Vue 2023年5月28日
    00
  • Vue from-validate 表单验证的示例代码

    下面是Vue表单验证的示例代码攻略。 1. 安装依赖和引入相关组件 首先需要安装依赖包,包括vee-validate和vue-i18n等。这里以npm为例,执行以下命令: npm install vee-validate@next vue-i18n 然后在Vue项目入口文件中引入依赖: import { createApp } from ‘vue’; imp…

    Vue 2023年5月28日
    00
  • Vuex详细介绍和使用方法

    Vuex是Vue.js框架中的一个状态管理工具,用于在Vue组件之间进行状态共享。它采用了单一数据源的概念,在全局维护了一个store对象,实现了统一状态的管理和维护。 Vuex的基础概念 State 在Vuex中,状态是唯一的数据源,在前端开发中,我们经常需要在不同的组件中使用相同的状态,为了保证状态的一致性和可控性,我们将其放置在store对象中,即状态…

    Vue 2023年5月27日
    00
  • vue项目如何去掉URL中#符号的方法

    Vue.js是一个采用渐进式开发的JavaScript框架,路由系统使用的是Vue Router,该路由系统默认使用URL中的 “#”(hash) 字符来控制页面的跳转。但是,在某些场景下,我们想要去掉URL中的 # 符号。这里提供两种去掉 URL 中 # 符号的方法。 方法一:使用HTML5 History模式 HTML5 History模式会使用HTML…

    Vue 2023年5月27日
    00
  • Vue生命周期详解

    Vue生命周期详解 Vue.js 是一个 MVVM 框架,在组件渲染过程中,每个组件都有自己的生命周期。这里将详细介绍 Vue 组件的生命周期函数。 Vue 组件生命周期可以分为四个阶段: 创建阶段 create 挂载阶段 mount 更新阶段 update 销毁阶段 destroy 创建阶段 create 在创建阶段,Vue 组件将从组件配置对象的初始化属…

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