Vue组件之间传值

本文详细介绍了Vue中父子组件、兄弟组件以及跨层级组件之间的数据传递方法,包括使用props、自定义事件、中间件通信(provide/inject)以及Vuex等方案,帮助开发者深入理解Vue组件间的通信原理。
摘要由CSDN通过智能技术生成

父传子

  1. 在父组件中引用子组件
  2. 在引入组件的地方绑定属性传递父组件数据
  3. 在子组件里使用props接收父组件数据
<!-- 父组件 -->
<template>
  <div class="fu">
    <zi :msg="msg" :other="other"></zi>
  </div>
</template>

<script>
import zi from './zi'
export default {
  components: {
    zi,
  },
  data() {
    return {
      msg: '父组件数据',
      other: '父组件其他数据',
    }
  },
}
<!-- 子组件 -->
<template>
  <div class="zi"></div>
</template>

<script>
export default {
  data() {
    return {}
  },
  // props: ['msg', 'other'], //简单语法
  props: {
    // 检测类型
    other: Number,
    // 检测类型 + 其他验证
    msg: {
      type: String,
      default: '',
      required: true,
      validator: function (value) {
        return value.length >= 2
      },
    },
  },
}
</script>

子传父

  1. 在父组件中引用子组件
  2. 在引入组件的地方绑定一个自定义事件
  3. 在子组件里使用emit触发事件,将子组件的数据作为参数传递给父组件,触发父组件的自定义事件接收
<!-- 父组件 -->
<template>
  <div class="fu">
    <zi @childFn="parentFn"></zi>
    {{ message }}
  </div>
</template>

<script>
import zi from './zi'
export default {
  components: {
    zi,
  },
  data() {
    return {
      message: '',
    }
  },
  methods: {
    parentFn(payload) {
      this.message = payload
    },
  },
}
</script>
<!-- 子组件 -->
<template>
  <div class="zi">
    <input type="text" v-model="msg" />
    <button @click="click">触发</button>
  </div>
</template>
<script>
export default {
  data() {
    return {
      msg: '子组件的数据',
    }
  },
  methods: {
    click() {
      this.$emit('childFn', this.msg)
    },
  },
}
</script>

兄弟组件间传值

  1. 创建一个js文件mid.js,在vue组件中引入即可
// mid.js
import Vue from 'vue'
export default new Vue()
  1. 在传递数据的vue组件中引入刚才的js,并在methods里边定义一个函数,调用此函数触发,将需要传递的数据作为参数
// brother1.vue
import mid from '@/mid.js'
export default {
  data() {
    return {
      msg: '谁在称无敌,哪个敢言不败?帝落时代都不见!',
    }
  },
  methods: {
    touch() {
      let that = this
      mid.$emit('deliver', that.msg)
    },
  },
}
  1. 在接收数据的vue组件引入此js,然后在created生命周期中监听并接收数据
// brother2.vue
import mid from '@/mid.js'
export default {
  data() {
    return {
      message: '',
    }
  },
  created() {
    mid.$on('deliver', (msg) => {
      this.message = msg
    })
  },
}

其他方案

  1. provide / inject
    这对选项需要一起使用,以允许一个祖先组件向其所有子孙后代注入一个依赖,不论组件层次有多深,并在其上下游关系成立的时间里始终生效
// 祖先组件提供msg
export default {
  data() {
    return {}
  },
  provide () {
    return {
      msg: 'OK'
    }
  }
}

// 子孙后代组件注入msg
export default {
  inject: ['msg'],
  created () {
    console.log(this.msg) // OK
  }
}
  1. 使用 $children 获取子组件对象
//父组件 fa.vue
let child = this.$children[0]
  1. 使用 $ref 获取指定的子组件对象
//父组件 fa.vue
<zi ref='ziCom'></zi>
let child = this.$refs.ziCom
  1. 使用 $parent 获取父组件对象
mounted() {
  let father = this.$parent
}
  1. vuex
Vue组件之间传值Vue框架中的一个重要功能,它允许不同的组件之间共享数据,实现数据的传递和交互。下面是Vue组件之间传值的最全面解释: 1. 父组件向子组件传值:父组件通过props属性向子组件传递数据,子组件通过props属性接收父组件传递的数据。这种方式适用于父子组件之间的数据传递,父组件可以向多个子组件传递数据。 2. 子组件向父组件传值:子组件通过$emit方法触发事件,父组件通过v-on指令监听事件,并通过事件对象获取子组件传递的数据。这种方式适用于子组件向父组件传递数据,子组件可以触发多个事件,父组件可以监听多个事件。 3. 兄弟组件之间传值:使用一个共同的父组件作为中介,通过props属性和$emit方法实现兄弟组件之间的数据传递。这种方式适用于兄弟组件之间的数据共享,需要注意父组件的数据传递和事件监听。 4. 使用Vuex进行状态管理:Vuex是Vue的状态管理库,可以实现多个组件之间的数据共享和状态管理。通过Vuex的store对象存储数据和状态,并通过mutations、actions和getters等方法实现数据的修改和获取。 5. 使用事件总线:通过Vue的事件机制,创建一个事件总线,多个组件可以通过事件总线进行数据传递。通过Vue实例的$emit方法触发事件,通过Vue实例的$on方法监听事件,并通过事件对象获取数据。 以上是Vue组件之间传值的最全面解释,需要根据具体的场景选择不同的传值方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值