vue组件通信

1.子组件如何快速改变父组件中传过来的值(通过引用传递的方式给子组件,子组件可以直接改变对象中的属性)

// App.vue
<template>
  <div>
    <News :a-msg="msg" :out-data="outData"></News>
    {{msg}}
    <h3>{{outData.a}}</h3>
  </div>
</template>

<script>
import News from ‘./components/News.vue‘
export default {
  data () {
    return {
      msg: ‘我是app组件中的内容‘,
      // 如果子组件想直接改变的值,可以传递一个对象到子组件中,因为这样的话,在组件中改变a,父组件也改变了,是因为js对象是引用传递
      outData:{
        a:"我是从组件app中给出的变量"
      }
    }
  },
  components:{
    News
  }
}
</script>

 在子组件中可以这样直接修改父组件传过来的对象

// News.vue
<template>
  <div>
    <h1>{{msg}}</h1>
    <h2>{{aMsg}}</h2>
    <h3 @click="change">{{outData.a}}</h3>
  </div>
</template>
<script>
  export default {
    props:[‘aMsg‘,‘outData‘],
    data(){
      return {
        ‘msg‘: ‘我是news组件中的内容‘
      }
    },
    methods:{
      change(){
        this.outData.a = ‘我可以直接这样改变你哦‘
      }
    }

  }
</script>

  

2.如果想从父组件中接收过来的值能在子组件中可以被修改,需要一个额外的内部变量来进行接收,这样在可以直接在内部改变自己的值,从而间接达到改变

// News.vue
<template>
  <div>
    <h1 @click="change">{{getMsg}}</h1>
  </div>
</template>
<script>
  export default {
    props:[‘aMsg‘],
    data(){
      return {
        // 如果想从父组件中接收过来的值能在子组件中可以被修改,需要一个额外的内部变量来进行接收,这样在可以直接在内部改变自己的值,从而间接达到改变
        ‘getMsg‘:this.aMsg
      }
    },
    mounted(){
        //或者将值在这里面改变
    },
    methods:{
      change(){
        this.getMsg = "改变"
      }
    }
  }
</script>

3.单一事件管理组件通信(所有组件之间快速通信)

父组件中引入三个组件AA,BB,CC,然后这三个同级组件之间互相通信

// App.vue
<template>
  <div>
    <AA :event="event"></AA>
    <BB></BB>
    <CC :event="event"></CC>
  </div>
</template>

<script>
import Vue from ‘vue‘
var Event = new Vue();
import AA from ‘./components/A.vue‘
import BB from ‘./components/B.vue‘
import CC from ‘./components/C.vue‘
export default {
  data () {
    return {
      msg: ‘我是app组件中的内容‘,
      event:Event
    }
  },
  components:{
    AA,
    BB,
    CC
  }
}
</script>

 AA组件

<template>
    <div>
        <span>{{msg}}</span>
        <input type="button" value="将A组件值传给C组件" @click="send">
    </div>
</template>

<script>
    export default{
        props:[‘event‘],
        data(){
            return {
                msg:‘我是a组件中的值‘
            }
        },
        methods:{
            send(){
                this.event.$emit(‘a-msg‘,this.msg);
            }
        }
    }
</script>

BB组件

<template>
    <div>
        <span>{{msg}}</span>
        <input type="button" value="将B组件值传给C组件">
    </div>
</template>

<script>
    export default{
        data(){
            return {
                msg:‘我是b组件中的值‘
            }
        }
    }
</script>

CC组件接受AA,BB组件中的值

<template>
    <div>
        <h1>{{msg}}</h1>
        <h3>我是接受过来的数据msg:{{getmsg}}</h3>
    </div>

</template>

<script>
    export default{
        props:[‘event‘],
        data(){
            return {
                msg:‘我是c组件中的值‘,
                getmsg:‘默认值‘
            }
        },
        mounted(){
            var _this = this
            this.event.$on(‘a-msg‘,function(a){
                    _this.getmsg=a;
            });
        }
    }
</script>

这样就轻松完成多组件之间的值传递

时间: 2024-07-29 19:02:48

vue组件通信的相关文章

Vue 组件通信

今天学习了,vue组件通信本篇随笔主要对今天的学习成果进行总结.有什么不对的地方还望谅解! 首先,Vue的核心即组件化开发,所以组件通信就显得十分重要. 组件通讯包括:父子组件间的通信和兄弟组件间的通信. 1.子组件获取父组件中数据间: var Child={ template:"#child", props:['mes'], data:function(){ return { data:this.$props.mes, //调用该子组件 props 中的对应属性的属性值: } } 通

Vue组件通信模式

概述 在Vue.js中,有几种我们能用的内部组件通信的方法.一般的属性和事件对于大多数场景来说已经够用了,但是除此之外,还有其他可用的方法. 属性和事件 当然,一般的通信方法用到了属性和事件.这种常用的模式是组件中一种强大的通信方式,它不用在相关的组件上引入任何依赖和限制. 属性 属性允许你传递任意的数据类型到一个子组件中,并且允许你控制组件接收何种类型的数据.属性的更新也是响应式的,这使得无论任何时候,父组件的数据改变,子组件就会更新. 模板用法: 123 <my-component v-bi

vue组件通信的几种方式

最近用vue开发项目,记录一下vue组件间通信几种方式 第一种,父子组件通信 一.父组件向子组件传值 1.创建子组件,在src/components/文件夹下新建一个Child.vue 2.Child.vue的中创建props,然后创建一个名为message的属性 child.png 3.在App.vue中注册Child组件,并在template中加入child标签,标签中添加message属性并赋值 App2.png 4.保存修改的文件,查看浏览器 browser.png 5.我们依然可以对m

vue组件通信(props,$emit,$attrs,$listeners)

朝颜陌 vue基础----组件通信(props,$emit,$attrs,$listeners) 一.父传子,子传孙 1. props 1>在父组件中通过子组件自定义的标签属性来传递数据. 2>在子组件中通过props声明希望用到的数据 1 <body> 2 <div id="app"> 3 <my-father :msg1="msg" a="10" :b="20" @click1=&

vue组件通信传值——Vuex

一.Vuex介绍 Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化. Vuex 也集成到 Vue 的官方调试工具devtools extension,提供了诸如零配置的 time-tavel 调试.状态快照导入导出等高级调试功能. 1.状态管理模式 一个简单的 Vue 计数应用范例如下所示: new Vue({ // state data () { return { count: 0 } }

Vue 组件通信(组件间通信)

1.中央事件总线bus <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8" /> <title>Vue</title> </head> <body> <div id="app"> <p>{{message}}</p> <my-compone

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

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

VUE组件通信(父传子)

首先把父组件要传输的数据用自定义属性绑定在标签上 <father :father_data=' data '></father> 在子组件中用prpos接收 const childcomponent = { template:'<child>{{son_data}}</child>', props:[' father_data'], //props['属性名'] (在父组件中用来绑定数据的属性名) data(){ return{ //用来接收数据的变量 so

封装Vue组件的一些技巧

封装Vue组件的一些技巧 本文同步在个人博客shymean.com上,欢迎关注 写Vue有很长一段时间了,除了常规的业务开发之外,也应该思考和反思一下封装组件的正确方式.以弹窗组件为例,一种实现是在需要模板中引入需要弹窗展示的组件,然后通过一个flag变量来控制弹窗的组件,在业务代码里面会充斥着冗余的弹窗组件逻辑,十分不优雅. 本文整理了开发Vue组件的一些技巧,包含大量代码示例. 开发环境 vue-cli3提供了非常方便的功能,可以快速编写一些测试demo,是开发组件必备的环境.下面是安装使用