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

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基础之事件v-onclick=”函数”用法示例

    以下是关于“vue基础之事件v-on:click=’函数’用法示例”的完整攻略。 什么是v-on:click事件 v-on:click是Vue.js中的一个指令,用于DOM元素的点击事件。通过在模板代码中使用该指令,可以方便地为DOM元素添加点击事件,实现交互效果。 基本使用 在Vue.js中,使用v-on:click添加点击事件,需要将代码嵌套在v-on指…

    Vue 2023年5月27日
    00
  • vue获取v-for异步数据dom的解决问题

    解决“vue获取v-for异步数据dom的解决问题”的攻略可以分为以下几个步骤: 在data中定义一个空数组,用于存储异步获取的数据。 在mounted生命周期钩子函数中,调用异步接口获取数据,并将数据存储在定义好的空数组中。 使用v-for指令遍历数组,并渲染到页面中。 具体示例如下: 使用axios获取异步数据渲染列表 <template> …

    Vue 2023年5月28日
    00
  • vue-cli3在main.js中console.log()会报错的解决

    在VueCLI3中,为了更加方便地创建和管理项目,工具链对Webpack进行了封装,因此我们无法直接在main.js中使用“console.log()”等JS原生方法。在这种情况下,我们可以使用VueCLI提供的“vue.config.js”文件来解决该问题。 下面是解决方案的详细步骤: 在项目根目录下创建“vue.config.js”文件。如果已经存在该文…

    Vue 2023年5月27日
    00
  • antd vue 表格rowSelection选择框功能的使用方式

    关于“antd vue 表格rowSelection选择框功能的使用方式”,以下是详细的攻略: 1. 引入antd vue表格和rowSelection 首先,我们需要在代码中引入antd vue表格和rowSelection选择框,具体方法如下: <template> <a-table :columns="columns&quo…

    Vue 2023年5月29日
    00
  • Vue Prop属性功能与用法实例详解

    当我们需要将数据从父组件传递到子组件时,可以使用 Vue 中的 Prop 属性来实现。本文将详细讲解 Vue Prop 属性的功能和用法,并提供两个示例说明。 Prop 属性的基本概念 Prop 属性的作用 Prop 属性用于将数据从父组件传递到子组件,实现组件之间的数据通信。 Prop 属性的传值方式 父组件通过向子组件传递属性 props ,子组件通过 …

    Vue 2023年5月27日
    00
  • Vue mockjs编写假数据并请求获取实现流程

    Vue MockJS是一款用于前端mock数据的工具。其可以模拟请求API返回假数据,用于前端开发时进行数据调试、测试。本文将详细介绍Vue MockJS编写假数据并请求获取的实现流程。 1. 安装Vue MockJS 在使用Vue MockJS之前,需要确保在项目中已经安装了Vue,接着可以通过npm或yarn来安装Vue MockJS。 # 使用npm进…

    Vue 2023年5月28日
    00
  • Vue computed计算属性详细讲解

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

    Vue 2023年5月28日
    00
  • element-ui中页面缩放时table表格内容错位的解决

    为了解决element-ui中页面缩放时table表格内容错位的问题,我们可以采用以下措施: 1. CSS调整 在表格的父元素中添加CSS样式,使其在缩放时保持宽度不变: .parent { overflow: auto; white-space: nowrap; } 其中,overflow: auto表示在缩放时出现滚动条;white-space: now…

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