Vue组件之间传值/调用几种方式

下面我将分享一下Vue组件之间传值/调用几种方式的完整攻略。

1. 父子组件之间传值

1.1. Props 驱动方式

在Vue中,通过Props可以将数据以标签属性的方式传递给子组件。我们可以在子组件中通过props属性接收父组件传递过来的数据,进而渲染到页面上。下面是一个示例:

<!--父组件-->
<template>
  <div>
    <child-component :propsData="message"></child-component>
  </div>
</template>
<script>
import childComponent from './childComponent.vue'
export default {
  components: {
    childComponent
  },
  data () {
    return {
      message: 'Hello World!'
    }
  }
}
</script>

<!--子组件-->
<template>
  <div>
    <p>{{ propsData }}</p>
  </div>
</template>
<script>
export default {
  props: ['propsData']
}
</script>

在上面的例子中,假设我们有一个父组件,在模板中使用自定义的child-component组件,并且传递了一个Props属性propsData。在子组件中,我们使用props属性定义了父组件传递过来的数据,然后在页面上进行渲染,最终显示Hello World!

1.2. $emit 自定义事件方式

除了使用Props驱动方式向子组件传递数据外,还可以通过$emit方法在子组件中定义自定义事件。当子组件需要向父组件通信时,就可以通过$emit方法触发自定义事件,并将参数传递给父组件进行处理。下面是一个示例:

<!--父组件-->
<template>
  <div>
   <child-component @send-msg="handleMsg"></child-component>
  </div>
</template>
<script>
import childComponent from './childComponent.vue'
export default {
  components: {
    childComponent
  },
  data () {
    return {
      recMsg: ''
    }
  },
  methods: {
    handleMsg (msg) {
      this.recMsg = msg
    }
  }
}
</script>

<!--子组件-->
<template>
  <div>
    <button @click="handleClick">向父组件发送消息</button>
  </div>
</template>
<script>
export default {
  methods: {
    handleClick () {
      this.$emit('send-msg', 'Hello World!')
    }
  }
}
</script>

在上面的例子中,我们在父组件模板中使用自定义的child-component组件,并通过$emit方法定义了一个名为send-msg的自定义事件。在子组件中,我们定义了一个handleClick方法,用于触发send-msg事件,并将消息Hello World!作为参数传递给父组件。

2. 非父子组件之间传值

2.1. Event Bus 方式

Event Bus是一种事件总线,它可以在全局范围内进行事件的传递和监听。在Vue中,我们可以通过Vue实例来实现一个Event Bus。具体来说,我们可以创建一个中央的Vue实例,专门用于事件的派发和监听,然后在需要通信的组件中使用$on和$emit方法进行事件的监听和派发。下面是一个示例:

<!--bus.js-->
import Vue from 'Vue'
export default new Vue()

<!--子组件1-->
<template>
  <div>
    <button @click="handleClick">向兄弟组件发送消息</button>
  </div>
</template>
<script>
import bus from './bus.js'
export default {
  methods: {
    handleClick () {
      bus.$emit('send-msg', 'Hello World!')
    }
  }
}
</script>

<!--子组件2-->
<template>
  <div>
    <p>{{ recMsg }}</p>
  </div>
</template>
<script>
import bus from './bus.js'
export default {
  data () {
    return {
      recMsg: ''
    }
  },
  mounted () {
    bus.$on('send-msg', msg => {
      this.recMsg = msg
    })
  }
}
</script>

在上面的例子中,我们定义了一个名为bus的中央Vue实例,并通过$emit方法触发了一个名为send-msg的事件,并将消息Hello World!作为参数传递给另一个子组件。在另一个子组件中,我们通过$on方法监听了send-msg事件,并将消息保存到组件的数据中进行渲染。

2.2. Vuex 方式

Vuex是Vue的官方状态管理工具,它提供了一种集中式管理应用所有组件状态的方案。在Vuex中,我们可以将组件的数据作为状态存储到Vuex中,然后可以在任何组件中访问和修改这些状态。下面是一个示例:

<!--store.js-->
import Vue from 'Vue'
import Vuex from 'Vuex'
Vue.use(Vuex)
export default new Vuex.Store({
  state: {
    message: ''
  },
  mutations: {
    setMessage (state, msg) {
      state.message = msg
    }
  }
})

<!--子组件1-->
<template>
  <div>
    <button @click="handleClick">向兄弟组件发送消息</button>
  </div>
</template>
<script>
import store from './store.js'
export default {
  methods: {
    handleClick () {
      store.commit('setMessage', 'Hello World!')
    }
  }
}
</script>

<!--子组件2-->
<template>
  <div>
    <p>{{ message }}</p>
  </div>
</template>
<script>
import store from './store.js'
export default {
  computed: {
    message () {
      return store.state.message
    }
  }
}
</script>

在上面的例子中,我们在store.js中定义了一个名为message的状态,并通过Vuex提供的mutations方法进行了修改。在子组件1中,我们通过store.commit方法提交一个名为setMessage的mutations并将消息Hello World!作为参数传递给它。在另一个子组件2中,我们通过Vuex提供的computed方法监听了message状态的变化,并将消息渲染到组件中。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Vue组件之间传值/调用几种方式 - Python技术站

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

相关文章

  • Vue中props的使用详解

    Vue中props的使用详解 什么是props 在Vue中,每个组件都可以接受一些参数,这些参数被称为props。props是一个数组,在组件定义中声明。你可以使用props从父组件中传递数据到子组件中。 如何使用props 在组件定义中声明props属性,用于接收父组件中传递的数据。在组件使用中,使用v-bind指令将需要传递给子组件的数据,绑定到组件的对…

    Vue 2023年5月28日
    00
  • Vue指令指令大全

    Vue指令是Vue.js的核心特性之一,为Vue.js提供了非常灵活和强大的操作DOM的能力。下面是Vue.js中常用的指令指令: v-text 指令格式:v-text 功能:用于在元素中输出文本内容,和插值表达式{{}}相同 示例: <!– Vue实例 –> <div id="app"> <p v-te…

    Vue 2023年5月27日
    00
  • vue3使用vuex实现页面实时更新数据实例教程(setup)

    下面是详细讲解“vue3使用vuex实现页面实时更新数据实例教程(setup)”的完整攻略。 一、什么是Vuex Vuex是一个专为Vue.js设计的状态管理模式,采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。Vuex中包含了:state,mutations,actions,getters和modules等模块。其…

    Vue 2023年5月27日
    00
  • vue实现自定义日期组件功能的实例代码

    实现自定义日期组件功能是一个常见的需求,在 Vue 中可以通过以下步骤实现: 创建组件 首先需要创建一个 Vue 组件,用来展示日期组件的样式和逻辑。在组件中可以使用 data 属性来保存当前日期和选中的日期等状态数据,使用 methods 属性里的方法来处理日期变化和用户操作事件。具体代码示例如下: <template> <div cla…

    Vue 2023年5月29日
    00
  • 一文教会你如何搭建vue+springboot项目

    一文教会你如何搭建Vue + Spring Boot 项目 本文将详细讲解如何使用Vue.js和Spring Boot搭建一个全栈Web应用程序。我们将从创建项目开始,一步步地进行讲解,涵盖前端和后端两个方面,最终将两者结合起来,搭建完成一个完整的应用程序。 准备工作 在开始之前,确保您已经安装了以下工具或软件: 最新的Node.js 最新的Java JDK…

    Vue 2023年5月28日
    00
  • vue2.0开发实践总结之入门篇

    Vue2.0开发实践总结之入门篇 介绍 本文主要介绍Vue2.0入门开发实践总结,旨在帮助前端开发者快速上手Vue2.0。文章扼要概括了Vue2.0的基本特性和应用场景,让读者了解Vue2.0的优点和使用价值,同时,结合具体的应用实例进行讲解,方便读者理解掌握Vue2.0的开发流程。 基本特性 Vue2.0是一款轻量、快速、易用的MVVM前端框架,具有以下几…

    Vue 2023年5月27日
    00
  • Vue Element前端应用开发之整合ABP框架的前端登录

    Vue Element前端应用开发之整合ABP框架的前端登录攻略 1. 注册ABP React网站并获取认证密钥 首先,我们需要先注册ABP React(或Vue)网站,并获取相应的认证密钥。具体步骤如下:1. 进入 https://react.aspnetboilerplate.com/ (或者 https://vue.aspnetboilerplate.…

    Vue 2023年5月28日
    00
  • vue实现图片拖拽功能

    在这里我将详细讲解使用Vue.js实现图片拖拽功能的攻略。这里我们将使用 Vue Droppable 这个开源插件来实现。 步骤一:安装 Vue Droppable Vue Droppable 是一个 Vue.js 插件,它旨在提供一个易于使用的 API 来实现拖放(Drag & Drop)功能。如果你已经在 Vue 应用中使用 npm 包管理器,则…

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