vue非父子组件传值

1)利用父子组件是实现非父子组件传值

2) 通过事件广播实现非父组件的传值

  1. 新建一个js文件VueEvent.js,在该文件中引入vue,实例化vue,暴露该实例
  2. 在要广播(即要传送数据)和接收数据的地方都要引入该实例
  3. 通过VueEvent.$emit('名称','数据')
  4. 接收数据的地方用$on
    VueEvent.$on('名称',(data)=>{ console.log(data) })代码示例如下:

js文件: VueEvent . js

import Vue from 'vue'
var VueEvent = new Vue()
export default VueEvent

父组件:fatherComp.vue

<template>
  <div class="father_bg">
    <son1 ></son1>
    <hr>
    <h3>这是父组件</h3>
    <hr>
    <son2></son2>
    <hr>
  </div>
</template>
<script>
import son1 from './sonComp1.vue'
import son2 from './sonComp2.vue'
export default {
  name: 'father1',
  components: {
    son1,
    son2
  }
}
</script>

子组件1(广播数据):sonComp1.vue

<template>
  <div class="son1_bg">
    <h3>这是son1</h3>
    <button @click="sendMsg">给son2组件广播数据</button>
  </div>
</template>
<script>
import VueEvent from '../VueEvent.js'
export default {
  name: 'son1',
  data () {
    return {
      msg: '这是son1的数据'
    }
  },
  methods: {
    sendMsg () {
      VueEvent.$emit('msg', this.msg)
    }
  }
}
</script>

子组件2(接收数据):sonComp2.vue

<template>
    <div class="son2_bg">
        <h3>这是son2</h3>
        <h4>{{da}}</h4>
    </div>
</template>
<script>
import VueEvent from '../VueEvent.js'
export default {
  name: 'son2',
  data () {
    return {
      da: ''
    }
  },
  mounted () {
    VueEvent.$on('msg', (data) => {
      this.da = data
    })
  }
}
</script>

测试结果:
在这里插入图片描述

### Vue 3 父子组件教程 在 Vue 3 中,父子组件之间的数据递主要通过 `props` 和 `emit` 实现。父组件可以通过 `props` 将数据递给子组件,而子组件则可以通过 `emit` 触发事件将数据回给父组件。 #### 父组件向子组件 父组件可以使用 `props` 向子组件递数据。以下是一个完整的示例: ```vue <!-- ParentComponent.vue --> <template> <div> <h1>父组件</h1> <p>当前:{{ inputValue }}</p> <ChildComponent :value="inputValue" @update:value="handleInput" /> </div> </template> <script setup> import { ref } from 'vue'; import ChildComponent from './ChildComponent.vue'; // 定义父组件的数据 const inputValue = ref('初始'); // 处理子组件的更新事件 const handleInput = (newValue) => { inputValue.value = newValue; }; </script> ``` 在此示例中,父组件通过 `:value` 将数据递给子组件,并监听 `update:value` 事件以接收子组件的更新[^1]。 #### 子组件向父组件 子组件可以通过 `emit` 方法将数据发送回父组件。以下是子组件的实现: ```vue <!-- ChildComponent.vue --> <template> <div> <h2>子组件</h2> <input :value="modelValue" @input="updateValue" /> </div> </template> <script setup> defineProps({ modelValue: { type: String, required: true } }); const emit = defineEmits(['update:modelValue']); const updateValue = (event) => { emit('update:modelValue', event.target.value); }; </script> ``` 在这个例子中,子组件通过监听 `input` 事件来捕获用户的输入,并通过 `emit` 方法触发 `update:modelValue` 事件将新递给父组件。 #### 使用 `v-model` 简化双向绑定 Vue 3 支持通过 `v-model` 实现父子组件之间的双向绑定。以下是如何结合 `v-model` 使用的示例: ```vue <!-- ParentComponent.vue --> <template> <div> <h1>父组件</h1> <p>当前:{{ inputValue }}</p> <ChildComponent v-model="inputValue" /> </div> </template> <script setup> import { ref } from 'vue'; import ChildComponent from './ChildComponent.vue'; const inputValue = ref('初始'); </script> ``` ```vue <!-- ChildComponent.vue --> <template> <div> <h2>子组件</h2> <input :value="modelValue" @input="updateValue" /> </div> </template> <script setup> defineProps({ modelValue: { type: String, required: true } }); const emit = defineEmits(['update:modelValue']); const updateValue = (event) => { emit('update:modelValue', event.target.value); }; </script> ``` 通过 `v-model`,父组件和子组件之间的数据绑定变得更加简洁和直观。 #### 注意事项 - 父组件向子组件递数据时,确保 `props` 的类型与数据一致。 - 子组件向父组件递数据时,推荐使用标准化的事件名称(如 `update:modelValue`),以便代码更具可读性[^2]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值