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页面加载时的进度条功能(实例代码)

    为了实现页面加载时的进度条功能,我们可以利用vue-router路由导航守卫的特性,监听路由跳转前后的事件,来实现页面加载状态的追踪和展示。下面是具体实现的步骤: 1.在项目中安装nprogress插件 npm install –save nprogress 2.在路由配置文件中引入nprogress import Nprogress from ‘npro…

    Vue 2023年5月27日
    00
  • Vue.js学习之计算属性

    下面是关于”Vue.js学习之计算属性”的完整攻略。 什么是计算属性 在Vue.js中,我们经常需要根据已经存在的数据,通过一些复杂的逻辑计算出新的值,然后再去渲染页面。 Vue.js提供了计算属性(computed)来方便我们实现这个需求。计算属性本质上是一个方法,它可以接收已经存在的数据为参数,然后根据这些数据进行计算,最终返回一个新的值。 一个计算属性…

    Vue 2023年5月27日
    00
  • 浅谈Vue.js中如何实现自定义下拉菜单指令

    下面就来详细讲解如何在Vue.js中实现自定义下拉菜单指令。 如何定义一个自定义指令 在Vue.js中定义一个自定义指令非常简单,只需要通过Vue.directive函数来注册一个全局指令,或者通过指令选项来定义一个局部指令即可。下面是一个例子: // 定义全局指令 Vue.directive(‘my-directive’, { bind: function…

    Vue 2023年5月27日
    00
  • 详解Vue中使用v-for语句抛出错误的解决方案

    下面是详解Vue中使用v-for语句抛出错误的解决方案的完整攻略。 问题描述 在Vue中使用v-for语句时,有时会出现以下错误: [Vue warn]: Error in render: "TypeError: Cannot read property ‘xxx’ of undefined" 这个错误通常发生在v-for语句循环数据时,…

    Vue 2023年5月27日
    00
  • 在vue项目中优雅的使用SVG的方法实例详解

    让我来为你详细讲解一下在Vue项目中优雅地使用SVG的方法。 在Vue项目中优雅地使用SVG的方法 什么是SVG? SVG(Scalable Vector Graphics)是一种基于XML语法的矢量图形格式,用于描述二维图形和绘图程序。相对于传统的像素图形格式(如JPG、PNG、BMP等),SVG图像拥有无限的放大缩小比例,因此可以良好地适应各种分辨率的设…

    Vue 2023年5月28日
    00
  • 详解Vue单元测试case写法

    下面是详解Vue单元测试case写法的完整攻略。 什么是Vue单元测试? Vue单元测试是指对一个Vue组件进行测试,以验证组件在预期条件下能否按照预期运行。在Vue单元测试中,我们主要对组件的数据、方法和生命周期进行测试。 如何进行Vue单元测试? Vue单元测试的实现需要使用工具 Vue Test Utils 和测试框架 Jest。这两个工具都可以通过n…

    Vue 2023年5月28日
    00
  • Vue组件实现原理详细分析

    当我们使用Vue.js构建web应用时,组件是不可或缺的一个部分。Vue组件的实现原理涉及到Vue实例、组件注册、组件渲染以及组件通信等方面,本文将就这些方面对Vue组件实现原理进行详细分析。 1. Vue实例与组件的关系 Vue组件其实就是Vue实例,通过new Vue()创建出来的实例就是根实例,在这个实例内部,可以通过组件注册、组件引用、属性继承等方式…

    Vue 2023年5月28日
    00
  • 如何启动一个Vue.js项目

    启动一个Vue.js项目可以分为以下几个步骤: 步骤1:安装Node.js和npm Vue.js是构建于Node.js之上的,所以首先需要安装Node.js和npm。Node.js下载地址为 https://nodejs.org/zh-cn/,下载合适的版本进行安装。npm是自带的包管理工具,不需要单独下载安装。 安装完成之后,可以在命令行中输入如下命令验证…

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