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

yizhihongxing

下面我将分享一下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如何使用moment处理时间戳转换成日期或时间格式

    下面是关于使用moment处理时间戳转换成日期或时间格式的完整攻略。 什么是moment.js? moment.js 是一个javascript 日期库,可用于解析、验证、操作和格式化日期。它支持日期和时间的计算、时间戳、日期字符串解析和格式化,以及各种本地化和时区设置等功能。 在Vue中使用moment.js 使用moment.js需要先将其引入到Vue项…

    Vue 2023年5月29日
    00
  • 解决vue.js not detected的问题

    当使用Vue.js框架开发web应用时,有时会出现Vue.js框架未被检测到的情况。这通常表现为网页空白,或者浏览器控制台输出“[Vue warn] You are using the runtime-only build of Vue where the template compiler is not available.” 这样的警告信息。本文将为大家…

    Vue 2023年5月27日
    00
  • vuex新手进阶篇之取值

    下面是关于“Vuex新手进阶篇之取值”的完整攻略。 1. 什么是Vuex Vuex是一个专为Vue.js设计的状态管理架构,它采用集中式存储管理应用的所有组件的状态,可以轻松管理各个组件之间的状态共享。 2. 文章主题:Vuex的取值 在Vuex中,要取到状态(state)中的值,需要使用vuex提供的getters方法。 2.1 定义getters get…

    Vue 2023年5月27日
    00
  • Vue导出Excel功能的全过程记录

    下面是详细讲解“Vue导出Excel功能的全过程记录”的完整攻略。 1. 背景说明 Excel是一个办公软件中常用的工具,它可以方便地进行表格数据的输入和编辑。在Web应用中,我们可能需要将表格数据以Excel格式导出,这就需要实现一个导出Excel的功能。Vue是一款流行的JavaScript框架,本文将介绍如何在Vue项目中实现导出Excel的功能。 2…

    Vue 2023年5月27日
    00
  • vue中如何使用embed标签PDF预览

    下面我来详细讲解“vue中如何使用embed标签PDF预览”的完整攻略。 一、前置条件 在使用embed标签预览PDF文件前,需要先安装Vue CLI工具,同时安装Vue PDF Viewer插件。 二、使用embed标签预览PDF文件的方法 以下是两种使用embed标签预览PDF文件的方法。 方法一:使用第三方组件库 Vue PDF Viewer是一个Vu…

    Vue 2023年5月28日
    00
  • Vue使用lodash进行防抖节流的实现

    下面是我对“Vue使用lodash进行防抖节流的实现”的完整攻略。 什么是防抖和节流 在讲解实现方法之前,我们来介绍一下什么是防抖和节流。 防抖指的是在事件被触发n秒后再执行回调,如果在这n秒内又被触发,则重新开始计时。防抖常用于用户输入的场景中,如搜索框输入查询关键字。 节流指的是在一个时间段内只执行一次回调函数,即达到规定的执行间隔时间后才执行。常用于页…

    Vue 2023年5月29日
    00
  • 深入理解Vue响应式原理及其实现方式

    深入理解Vue响应式原理及其实现方式 什么是Vue响应式原理 Vue.js是一种用于构建交互式Web界面的渐进式JavaScript框架,可以帮助开发者更高效地构建Web应用。Vue的响应式原理是Vue最重要的特性之一,它允许开发者通过声明式数据绑定来管理应用的状态,并自动跟踪数据之间的依赖关系和更新视图,提高了开发效率并提供更好的用户体验。 在Vue的响应…

    Vue 2023年5月27日
    00
  • uni-app 使用编辑器创建vue3 项目并且运行的操作方法

    安装编辑器和uni-app 首先需要安装编辑器,比如VS Code、Sublime Text、Atom等,这里以VS Code为例。 接下来需要安装并配置uni-app,可以使用以下命令:npm install -g @vue/cli和vue create -p dcloudio/uni-preset-vue my-project进行安装和初始化。 创建vu…

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