美文网首页
vue组件之间的通信

vue组件之间的通信

作者: 泪滴在琴上 | 来源:发表于2018-11-14 22:33 被阅读1次

    父组件向子组件传值 prop

    英式发音:[prɒp]

    prop接收的数据 类型

    refAge: {
    type: Number,
    default: 0
    },
    refName: {
    type: String,
    default: ''
    },
    hotDataLoading: {
    type: Boolean,
    default: false
    },
    hotData: {
    type: Array,
    default: () => {
    return []
    }
    },
    getParams: {
    type: Function,
    default: () => () => {}
    },
    meta: {
    type: Object,
    default: () => ({})
    }
    

    代码:

    <div id="app">
      <child :content="message"></child>
    </div>
    
    // Js
    let Child = Vue.extend({
      template: '<h2>{{ content }}</h2>',
      props: {
        content: {
          type: String,
          default: () => { return 'from child' }
        }
      }
    })
    new Vue({
      el: '#app',
      data: {
        message: 'from parent'
      },
      components: {
        Child
      }
    })
    

    浏览器输出:from parent

    子组件向父组件传值 $emit

    英式发音:[iˈmɪt]

    <div id="app">
      <my-button @greet="sayHi"></my-button>
    </div>
    let MyButton = Vue.extend({
      template: '<button @click="triggerClick">click</button>',
      data () {
        return {
          greeting: 'vue.js!'
        }
      },
      methods: {
        triggerClick () {
          this.$emit('greet', this.greeting)
        }
      }
    })
    new Vue({
      el: '#app',
      components: {
        MyButton
      },
      methods: {
        sayHi (val) {
          alert('Hi, ' + val) // 'Hi, vue.js!'
        }
      }
    })
    

    EventBus

    思路就是声明一个全局Vue实例变量 EventBus , 把所有的通信数据,事件监听都存储到这个变量上。这样就达到在组件间数据共享了,有点类似于 Vuex。但这种方式只适用于极小的项目,复杂项目还是推荐 Vuex。下面是实现 EventBus 的简单代码:

    <div id="app">
      <child></child>
    </div>
    // 全局变量
    let EventBus = new Vue()
    // 子组件
    let Child = Vue.extend({
      template: '<h2>child</h2>',
      created () {
        console.log(EventBus.message)
        // -> 'hello'
        EventBus.$emit('received', 'from child')
      }
    })
    new Vue({
      el: '#app',
      components: {
        Child
      },
      created () {
        // 变量保存
        EventBus.message = 'hello'
       // 事件监听
        EventBus.$on('received', function (val) {
          console.log('received: '+ val)
          // -> 'received: from child'
        })
      }
    })
    

    Vuex

    有文章:https://www.jianshu.com/p/79f8d6ab54ca

    相关文章

      网友评论

          本文标题:vue组件之间的通信

          本文链接:https://www.haomeiwen.com/subject/dnisfqtx.html