vue的父子组件间传值以及非父子间传值

Vue组件间的传值方式:

父传子

子传父

非父子间传值

1.首先父组件传值给子组件,使用bind绑定属性,然后在子组件用props接收属性值.

//父组件
<template>
  <input  type="text" />
  <br/>
  <child :inputValue="inputValue"></child>
</template>

<script>
 import child from ‘./Child/child‘
 export default{
   data(){
      return{
       inputValue:‘我是父组件‘
     }
   },
   components:{
      child
   }

 }

</script>
//子组件child

<template>
    <span> {{inputValue}} </span>
<template>

<script>

  export default {
     props:{
         inputValue:‘‘
      }
   }

</script>

2.子组件传值给父组件,子组件通过绑定点击事件提交this.$emit()方法传值,父组件通过监听来操作传过来的值.

//子组件
<template>
   <div>
      <span>{{childValue}}</span>      <br>
      <input type="text" @click="childClick">
   </div>
<template>

<script>
  export default{
    data(){
       childValue:‘我是子组件‘
    },
    methods:{
       childClick(){
          this.$emit(‘sub‘,this.childValue)//第一个参数是父组件监听的函数 ,第二个参数是要传递给父组件的值.
       }
    }  

  }

</script>

.

//父组件<template>
    <span>{{name}}</span>
    <br>
    <child @sub="parentEvent"></child>
</template>

<script>
 import child from ‘./child‘
  export default{
    components:{
        child
   },
   data(){
      return {
        Value:‘‘
     }
   },
   methods:{
     parentEvent(data){
        this.Value=data;
     }
   }   

  }

</script>

3.非父子组件间的传值

通过公共eventBus.js来传值,定义一个新的vue实例专门用来传递数据.

//eventBus.js
import Vue from ‘vue‘;
export default new Vue();
//组件A
<template>
     <button @click="emitToB"></button>
</template>

<script>
 import eventBus from ‘./eventBus‘
  export default{
    data(){
      return{
      }
    },
    methods:{
       emitToB(){
         eventBus.$emit(‘eventA‘,"我是A传给B的值");
      }
    } 

 } 

</script>
//组件B
<template>
   <span>{{title}}</span>
</template>

<script>
import eventBus from ‘./eventBus‘
 export default{
   data(){
      return {
       title:‘‘
     }
   },
  mounted(){
    this. getA();
 },
 methods:{
   var that=this;
   getA(){
      eventBus.$on(‘eventA‘,function(data){
           that.title=data;
     })
   }
 }  

 }

</script>

原文地址:https://www.cnblogs.com/xxcnhj/p/11040569.html

时间: 2024-11-07 00:36:34

vue的父子组件间传值以及非父子间传值的相关文章

vue 2 使用Bus.js进行兄弟(非父子)组件通信 简单案例

vue2中废弃了$dispatch和$broadcast广播和分发事件的方法.父子组件中可以用props和$emit().如何实现非父子组件间的通信,可以通过实例一个vue实例Bus作为媒介,要相互通信的兄弟组件之中,都引入Bus,之后通过分别调用Bus事件触发和监听来实现组件之间的通信和参数传递. 首先需要在任意地方添加一个bus.js 在bus.js里面 写入下面信息 1 import Vue from 'vue' 2 export default new Vue; 在需要通信的组件都引入B

父子,子父,非父子组件通信

父子组件通信 父亲的数据给子集 父组件向子组件传值 ??? 子组件在props中创建一个属性,用于接收父组件传过来的值: ??? 父组件 引入子组件-->注册子组件-->引用子组件: ??? 在子组件标签中添加子组件props中创建的属性: ??? 将所要传递的值赋值给该属性. props: prop类型:通常你希望每个prop都有指定的数据类型,你可以以对象的形式列出prop,对象的属性的名称和值分别对应了prop的值和类型. 单向数据流:所有的prop都使得其父子prop形成一个单向数据流

Vue bus的使用(兄弟|非父子组件传值)--&gt;可以使用一个空的Vue实例作为中央事件总线new Vue()

1.在main.js中注册全局的bus  Vue.prototype.bus=new Vue(); 2.在组建中使用 子组建使用:this.bus.$emit('自定义事件名',data) methods:{        handleClicks(){        this.bus.$emit('openMenu',true)       } } 父组建使用:  this.bus.$on("自定义事件名", msg => {}) mounted() {    this.bus

vuex非父子组件间改值

最近在用vue写单页面项目嘛,然后就有遇到这问题啦,看了很多参考,要么繁琐的一塌糊涂,要么就是传值并不是改值,下面我述说下方法,最清晰的简单demo 父子间用props 非父子间用vuex store(store/index.js) state: { x:66 }, mutations:{ add:function(state,x){//这边的x来自于a.vue state.x=1+state.x; } }......... a.vue 先引用过来store(import { store } f

vue.js 创建组件 子父通信 父子通信 非父子通信

1.创建组件 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>创建组件</title> <script src="https://unpkg.com/vue/dist/vue.js"></script> </head> <body> &l

非父子组件间的传值

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>非父子组件间的传值(Bus/总线/发布订阅模式/观察者模式)</title> <script src="./vue.js"></script> </head> <body> <div

Vue组件通信之非父子组件传值

前言: 如果想要了解非父子关系的组件传值,最好是在了解父传子和子传父的基础上在来了解非父子传值可能会有更透彻的思路. 因为非父子传值是通过定义事件总线来代理实现父传子+子传父从而实现的传值方式. 这是我总结的父子传值相关的知识,可供参考: https://www.cnblogs.com/ViavaCos/p/11712131.html 然后大概回顾一下父子传值的过程: 根据上述信息可知,如果两个组件需要传递值那么需要这两个组件之间是父子关系才能传递数据. 那么如果有这样一个组件,既可以帮你传递数

非父子组件间传值(一)

非父子组件间传值有两种方法,一种是vuex共享数据,另一种是发布订阅模式/观察者模式/总线/Bus.这篇随笔主要总结总线机制的学习心得: 首先通过在Vue.prototype上挂载一个bus属性,指向vue实例:接下来在调用Vue或者创建组件时都会有bus属性. Vue.prototype.bus=new Vue() var Child={ props:['content'], data:function() { return {num:this.content} }, //因为vue是单项数据

【vue】父组件主动调用子组件 /// 非父子组件传值

一  父组件主动调用子组件: 注意:在父组件使用子组件的标签上注入ref属性,例如: <div id="home"> <v-header ref="header"></v-header> <hr> 首页组件 <button @click="getChildData()">获取子组件的数据和方法</button> </div> 父组件主动获取子组件的数据和方法: 1