• Vue组件间的通信


    一、子组件修改父组件数据

    子组件想要修改父组件的数据,只能通过子组件事件来触发

    通过子组件触发事件更改父组件的style="overflow: xx" 样式 <div id="home" class="home" ref="home" :style="{'overflow': overflow}">

    1. 给子组件添加changeOverflow事件

    1 <div @click="changeOverflow">
    2     <i class="icon-set_01revisepassword icon-img"></i>
    3     修改密码
    4 </div>

    2. 在子组件methods中定义changeOverflow方法,$emit(自定义事件的名称, 发送给父组件的数据

    1 changeOverflow() {
    2    // changeOverflow为自定义事件的名称,this.overflowHome,为发送给
    3   // 父组件的数据
    4   this.$emit('changeOverflow',this.overflowHome) 
    5 }

    3. 在父组件中 @+子组件自定义的事件名称="事件方法名称"

    1 <Setting ref="setting" @changeOverflow="changeOverflow"></Setting>

    4. 在父组件中,定义事件方法,将子组件传过来的数据赋值给父组件

    1 changeOverflow(overflow) { // 参数overflow为子组件发送给父组件的数据
    2    this.overflow = overflow;
    3 }

    二、跨组件间的数据通信

    非父子组件间的数据通信:使用一个空的Vue实例作为事件中央总线(bus)

    这种方法巧妙轻量地实现了任何组件间的通信,包括父子、兄弟、跨级组件。在项目不大的情况下可以用,项目较大可以用vuex来管理数据状态

    1. 新建一个bus.js 在bus.js中:

    import Vue from 'vue';

    export var bus = new Vue();

    2. 在发送组件中:

    import { bus } from '...bus.js'

    bus.$emit("自定义事件名称", "传入数据")

    1 backtoHome() {
    2    this.$router.push('/home');
    3    bus.$emit('overfl-visi',this.overflVisible);
    4 }


    3. 在接收数据组件中:实例初始化时,监听来自发送组件 bus的实例事件

    import { bus } from '...bus.js'

    bus.$on("发送组件自定义事件名称", function(data){}) // data参数为接收到的数据

    1 mounted () {
    2    var _this = this;
    3    bus.$on('overfl-visi', function(overflow){
    4    _this.overflow = overflow;
    5  })
    6 }
  • 相关阅读:
    bootstrap:按钮,下拉菜单
    js:indexOf()方法
    js:object.offsetHeight属性
    css y轴溢出滚动条,x轴溢出显示
    datatables使用方式
    ajax同步与异步的坑
    IntelliJ IDEA 快捷键说明大全(中英对照、带图示详解) (转载)
    无法解析此远程名称: 'www.***.com' 解决办法 请求因 HTTP 状态 417 失败 (转载)
    Windows下安装MongoDB3.6.5 (转载)
    解决内部存储空间紧张,不加载桌面壁纸,桌面壁纸显示
  • 原文地址:https://www.cnblogs.com/tian-long/p/8417327.html
Copyright © 2020-2023  润新知