vue常用的传值方式:父传子,子传父,eventBus

本文详细介绍了Vue中父子组件如何通过props进行数据传递,以及子组件如何使用emit向父组件发送事件。此外,还展示了非父子组件间利用公共实例(bus.js)进行通信的实现方式,确保在不同路由组件间也能有效传递数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 父组件向子组件进行传值props
在这里插入图片描述

父组件:

<template>
  <div>
    父组件:
    <input type="text" v-model="name">
    <br>
    <br>
    <!-- 引入子组件 -->
    <child :inputName="name"></child>
  </div>
</template>
<script>
  import child from './child'
  export default {
    components: {
      child
    },
    data () {
      return {
        name: ''
      }
    }
  }
</script>

子组件:

<template>
  <div>
    子组件:
    <span>{{inputName}}</span>
  </div>
</template>
<script>
  export default {
    // 接受父组件的值
    props: {
      inputName: String,
      required: true
    }
  }
</script>

2. 子组件向父组件传值emit
在这里插入图片描述

子组件:

<template>
  <div>
    子组件:
    <span>{{childValue}}</span>
    <!-- 定义一个子组件传值的方法 -->
    <input type="button" value="点击触发" @click="childClick">
  </div>
</template>
<script>
  export default {
    data () {
      return {
        childValue: '我是子组件的数据'
      }
    },
    methods: {
      childClick () {
        // childByValue是在父组件on监听的方法
        // 第二个参数this.childValue是需要传的值
        this.$emit('childByValue', this.childValue)
      }
    }
  }
</script>

父组件:

<template>
  <div>
    父组件:
    <span>{{name}}</span>
    <br>
    <br>
    <!-- 引入子组件 定义一个on的方法监听子组件的状态-->
    <child v-on:childByValue="childByValue"></child>
  </div>
</template>
<script>
  import child from './child'
  export default {
    components: {
      child
    },
    data () {
      return {
        name: ''
      }
    },
    methods: {
      childByValue: function (childValue) {
        // childValue就是子组件传过来的值
        this.name = childValue
      }
    }
  }
</script>

非父子之间传值
非父子组件之间传值,需要定义个公共的公共实例文件bus.js,作为中间仓库来传值,不然路由组件之间达不到传值的效果。
创建一个公共的bus.js

//bus.js
import Vue from 'vue'
export default new Vue()

组件A:

<template>
  <div>
    A组件:
    <span>{{elementValue}}</span>
    <input type="button" value="点击触发" @click="elementByValue">
  </div>
</template>
<script>
  // 引入公共的bug,来做为中间传达的工具
  import Bus from './bus.js'
  export default {
    data () {
      return {
        elementValue: 4
      }
    },
    methods: {
      elementByValue: function () {
        Bus.$emit('val', this.elementValue)
      }
    }
  }
</script>

组件B:

<template>
  <div>
    B组件:
    <input type="button" value="点击触发" @click="getData">
    <span>{{name}}</span>
  </div>
</template>
<script>
  import Bus from './bus.js'
  export default {
    data () {
      return {
        name: 0
      }
    },
    mounted: function () {
      var vm = this
      // 用$on事件来接收参数
      Bus.$on('val', (data) => {
        console.log(data)
        vm.name = data
      })
    },
    methods: {
      getData: function () {
        this.name++
      }
    }
  }
</script>
Vue中,可以通过使用事件总线(Event Bus)来实现子组件向组件,同时子组件也可以修改组件的。下面是一些基本步骤和注意事项: 1.组件中,首先需要创建一个事件总线对象,可以在全局范围内使用。可以使用Vue实例对象来创建事件总线对象,并将其导出,以便在其他组件中使用。 ```php // 在组件中 import eventBus from './eventBus' export default { methods: { init() { // 创建事件总线对象并导出 this.$eventBus = eventBus }, // 其他方法... } } ``` 然后在需要递事件和接收事件的组件中导入和使用事件总线对象。 2. 在子组件中,可以通过事件总线对象来发布事件和接收事件。例如,可以使用`$emit`方法来发布事件,并递需要递的。 ```php // 子组件中 this.$eventBus.$emit('eventName', value) ``` 在组件中,可以使用`$on`方法来监听子组件发布的事件,并获取递的。 ```php // 组件中 this.$eventBus.$on('eventName', (value) => { // 处理从子组件递过来的 }) ``` 注意:在使用事件总线时,应该避免在循环中触发事件,因为这可能会导致无限循环。同时,为了避免内存泄漏,应该使用Vue提供的清理机制来销毁不再使用的实例对象。 3. 子组件可以通过修改组件的来响应某些事件。例如,当组件接收到子组件发布的事件后,可以根据需要修改组件的。可以使用Vue的响应式机制来实现这一功能。在组件中,使用`watch`选项来监听子组件递的,并在需要时更新组件的。 以上是Vue中使用事件总线实现子组件向组件和子组件修改组件的基本步骤和注意事项。需要注意的是,在使用事件总线时应该注意避免循环引用和内存泄漏问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值