vue 中几种传值方法(3种)

yizhihongxing

当我们在 Vue 中需要进行组件间的数据传递时,就需要使用到一些传值方法。下面将从 props、emit 和 vuex 三个方面分别介绍 Vue 中三种传值方法。

1. props

props 是 Vue 中组件间传值最常用的方法之一。它可以实现父组件向子组件传值,在子组件中可以直接使用 props 来访问。

1.1. 定义props

在父组件中定义 props,示例代码如下:

<template>
  <child :msg="message"></child>
</template>
<script>
import Child from './Child.vue'
export default {
  components:{
    Child
  },
  data() {
    return {
      message: 'Hello Vue!'
    }
  }
}
</script>

在子组件中使用 props,示例代码如下:

<template>
  <h1>{{ msg }}</h1>
</template>
<script>
export default {
  props: ['msg']
}
</script>

1.2. 使用props

  1. 在父组件中将所需的数据传入子组件。
<template>
  <child :msg="message"></child>
</template>
<script>
import Child from './Child.vue'
export default {
  components:{
    Child
  },
  data() {
    return {
      message: 'Hello Vue!'
    }
  }
}
</script>
  1. 在子组件中使用 props。
<template>
  <h1>{{ msg }}</h1>
</template>
<script>
export default {
  props: ['msg']
}
</script>

2. emit

emit 是 Vue 中子组件向父组件传值的方法,它可以在子组件中通过 emit 方法将数据传递给父组件。

2.1. 定义emit

在子组件中定义 emit,在这个例子中,我们传递一个字符串数据:

<template>
  <h1 @click="clickHandler">{{ message }}</h1>
</template>
<script>
export default {
  data() {
    return {
      message: 'Hello Vue!'
    }
  },
  methods: {
    clickHandler() {
      this.$emit('click-event', 'Hello Parent Component!')
    }
  }
}
</script>

2.2. 使用emit

  1. 在父组件中调用 emit 方法,并接收子组件传递的数据。
<template>
  <child @click-event="showData"></child>
</template>
<script>
import Child from './Child.vue'
export default {
  components: {
    Child
  },
  methods: {
    showData(data) {
      console.log(data)
    }
  }
}
</script>
  1. 在子组件中通过 emit 方法将数据传递给父组件。
<template>
  <h1 @click="clickHandler">{{ message }}</h1>
</template>
<script>
export default {
  data() {
    return {
      message: 'Hello Vue!'
    }
  },
  methods: {
    clickHandler() {
      this.$emit('click-event', 'Hello Parent Component!')
    }
  }
}
</script>

3. vuex

vuex 是 Vue.js 中一种状态管理模式,用于在多个组件之间共享状态。通常情况下我们可以使用 props 和 emit 来进行父子组件之间的数据传递,但是当组件之间的关系变得更加复杂时,就需要使用 vuex 来进行管理了。

3.1. 定义vuex

将所有的需要共享的状态放在 Vuex 的 store 中进行管理:

import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

export default new Vuex.Store({
  state: {
    count: 0
  },
  mutations: {
    increment (state) {
      state.count++
    }
  }
})

3.2. 使用vuex

  1. 在需要使用 state 的组件中引入 Vuex 并使用 mapState 将 state 映射到组件计算属性中。
<template>
  <div>
      <h1>{{ message }}</h1>
      <button @click="increment">增加</button>
  </div>
</template>
<script>
import { mapState, mapMutations } from 'vuex'
export default {
  computed: mapState({
    message: state => `现在的数值是${state.count}`
  }),
  methods: mapMutations([
    'increment'
  ])
}
</script>
  1. 在使用 state 的组件中使用方法来改变 state 中的数据。
<template>
  <div>
    <h1>{{ message }}</h1>
    <button @click="increment">增加</button>
  </div>
</template>
<script>
import { mapState, mapMutations } from 'vuex'
export default {
  computed: mapState({
    message: state => `现在的数值是${state.count}`
  }),
  methods: mapMutations([
    'increment'
  ])
}
</script>

以上就是 Vue 中的三种传值方法:props、emit 和 vuex。当组件关系相对简单时可以使用 props 和 emit 进行传递数据,当组件之间的关系变得更加复杂时,可以使用 vuex 进行状态管理。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue 中几种传值方法(3种) - Python技术站

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

相关文章

  • vant开发微信小程序安装以及简单使用教程

    安装 (1)首先需要安装Node.js,安装完毕后可以通过以下命令检查Node.js是否安装成功: node -v (2)然后在命令行窗口中输入以下命令,安装@vant/weapp: npm i @vant/weapp -S –production 开发 (1)将vant组件导入小程序中,在需要使用vant的页面的json文件中引入vant组件: { &q…

    Vue 2023年5月27日
    00
  • Vue项目中使用jsonp抓取跨域数据的方法

    使用jsonp抓取跨域数据是前端开发中常用的一种方法,而在Vue项目中使用jsonp抓取跨域数据则需要注意一些细节。下面是Vue项目中使用jsonp抓取跨域数据的完整攻略: 1.概述 前端的同学们都知道,由于浏览器的同源策略限制,导致 Ajax 请求不能跨域。而 JSONP 是一种跨域请求的解决方案,可以通过 script 标签来实现跨域请求。Vue.js …

    Vue 2023年5月28日
    00
  • 浅谈在Vue.js中如何实现时间转换指令

    怎样在Vue.js中定义自定义指令Vue.js框架中提供了一个全局指令注册方法Vue.directive,可以方便地添加自定义指令。指令本质上就是一个指令函数,有五个钩子函数,分别对应着不同的阶段。 如何实现时间转换指令在Vue.js中,可以采用过滤器方式来实现时间转换,也可以采用指令方式来实现。在本文中,我们主要介绍如何使用指令来实现时间转换功能。时间转换…

    Vue 2023年5月28日
    00
  • vue+element开发一个谷歌插件的全过程

    当使用Vue和Element技术栈实现Chrome扩展程序时,需要了解Chrome扩展程序开发的特点和Vue.js和Element的基本用法。下面将详细介绍如何使用Vue.js和ElementUI来构建一个Chrome浏览器扩展程序。 1. 简要介绍Chrome扩展程序开发的基本流程 Chrome扩展程序可由一个或多个HTML、CSS和JavaScript文…

    Vue 2023年5月28日
    00
  • 深入理解vue.js中$watch的oldvalue与newValue

    深入理解vue.js中$watch的oldValue与newValue 在Vue.js中,$watch是一个非常核心的API,经常用来监听数据的变化。$watch的主要用法如下: watch: { ‘data.field'(newVal, oldVal) { // 当 data.field 发生变化时触发该回调函数,newVal 表示变化后的值,oldVal…

    Vue 2023年5月28日
    00
  • vue更新数据却不渲染页面的解决

    下面是关于Vue更新数据却不渲染页面的解决攻略的详细讲解。 问题背景 在Vue中,一般我们通过修改组件的数据来更新页面。但有时候在修改数据后,页面却没有自动更新,这可能会给我们带来很多困扰。这种情况在Vue中被称作“数据更新但是视图不更新”。 可能出现原因 造成“数据更新但是视图不更新”的原因主要有以下几种: Vue的异步更新机制:当我们修改Vue中的数据时…

    Vue 2023年5月29日
    00
  • Vue中对watch的理解(关键是immediate和deep属性)

    Vue中的watch选项可以用来监听数据的变化,并在数据变化时执行一些自定义的操作。它包括了一些属性,如immediate和deep,这些属性可以帮助我们更好地控制watch的行为。 immediate immediate属性表示在实例被创建时,是否立即执行一次watcher回调函数。默认情况下,watch回调函数是在第一次数据变化之后执行的,但是如果需要在…

    Vue 2023年5月27日
    00
  • vue3.0 vue.config.js 配置基础的路径问题

    配置Vue.js项目的构建后的静态文件的发布路径是非常必要的。在Vue.js 3.0中,配置静态资源的发布路径的方式有所改变。本文将提供Vue.js 3.0中的vue.config.js配置多个基础路径的示例说明。 创建Vue.js 3.0项目 使用Vue CLI 3创建Vue.js 3.0项目: $ vue create my-project vue.co…

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