vue 构建单页应用6

2018-06-08  本文已影响18人  那就远走

父组件给子组件传值

export default {
    props: {
        // 接收数据的名称: 数据类型,
        msg: String,
    }
}

此时子组件即可调用 msg 的值了。

还可以传递方法,注意这样接收 run: Function, ,甚至父组件自身传给子组件: <子组件标签 :parent="this"></子组件标签>(这个用 Object 类型接收)。

父组件主动获取子组件的数据和方法

子组件主动获取父组件的数据和方法

非父子组件(同级组件)传值

  1. 可以利用父组件传值 => 子组件1 和 子组件2 通过他们共同的父组件交换数据。
  2. 利用空的Vue实力广播 :
    • 首先,需要新建一个空的Vue势力,我们创建在 /src/modules/ 下,取名 exchangeData.js
    /**
    * 监听同级组件数据交换
    */
    import Vue from 'vue'
    
    var exchangeData = new Vue();
    
    export default exchangeData;
    
    • 之后,我们定义发起数据的子组件: Vue实例.$emit
    # 模板
    <button @click="exchangeDataToDaughter()">点击传值给女儿组件</button>
    
    # 脚本
    // 引用 exchangeData
    import exchangeData from "../modules/exchangeData.js"
    ...
    methods: {
        exchangeDataToDaughter() {
            // 广播数据 $emit('数据名', 值);
            exchangeData.$emit('toDaughter', this.msg);
        }
    }
    
    • 最后,在接收数据的女儿组件中: Vue实例.$on
    # 我们直接用挂载完成的生命周期函数接收
    mounted() {
        // 接收数据 $on('数据名称', 回调函数(data为接收的数据) => { //... });
        exchangeData.$on('toDaughter', (data) => {
            alert(data);
        });
    }
    

总结: 1,建立一个空的Vue实例。 2,发送数组和接收数据的组件都需要引用该空实例。 3,发起使用 Vue实例.$emit('key', value) 4,接收数据使用 Vue实例.$on('key', (data) => { //data就是接收到的数据 })

上一篇下一篇

猜你喜欢

热点阅读