欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

vue 组件之间通信

程序员文章站 2024-03-15 08:22:29
...

一切从简,不用webpack。

1. props $emit

主要是父子之间通信,兄弟之间通信。

<!-- html -->
<!DOCTYPE html>
<html>
<head>
<script src="http://vuejs.org/js/vue.js"></script>
  <meta charset="utf-8">
  <title>JS Bin</title>
</head>
<body>
<div id="app">
  <p>父组件中的值parentNum: {{ parentNum }}</p>
  <add-component :transfer=parentNum @change=plus></add-component>
  <reset-component @reset=reset></reset-component>
  <button @click=fatherAdd>父组件自增</button>
</div>
</body>
</html>
Vue.component('add-component', {
  template: `
    <div>
      <div>子组件中的值childNum: {{childNum}}</div>
      <button @click="increment">子组件中自增</button>
    </div>
  `,
  props: {
    transfer: {
      Number,
    }
  },
  watch: {
    'transfer': function(childNum) {
      this.childNum = childNum;
    }
  },
  data() {
    console.warn('transfer:' + this.transfer);
    return {
       childNum: this.transfer
    }
  },
          
  methods: {
    increment() {
      this.childNum++;
      this.$emit('change', this.childNum)
    }
  },
});

Vue.component('reset-component', {
  template: `
    <div>
      <button @click=reset>重置</button>
    </div>
  `,
  methods: {
    reset() {
      this.$emit('reset');
    }
  }
});

new Vue({
  el: '#app',
  data: {
    parentNum: 0
  },
  methods: {
    fatherAdd() {
      this.parentNum += 1;
    },
    plus(newNum) {
      console.log('newNum:' + newNum);
      this.parentNum = newNum;
    },
    reset() {
      this.parentNum = 0;
    }
  }
})

父子之间通信说明:
父组件向子组件add-component传递初始值parentNum,子组件通过props接受并自定内部变量用childNum,子组件中有一个按钮,每点击一下数值就会自增1。

如果子组件用了自己的变量而不是直接用的父组件的变量,则需要通过watch来实时更新子组件的内容 。
watch transfer表示: 一旦父组件更新了,立马传递到子组件中。
子组件通过$emit方法向父组件传递数值。

兄弟组件通信说明:
reset-component是add-component的兄弟组件,本示例中无法直接通信,可借助父组件通信。

2. eventBus

/新建一个Vue实例作为*事件总嫌/
let event = new Vue();

/监听事件/
event.$on('eventName', (val) => {
//......do something
});

/触发事件/
event.$emit('eventName', 'this is a message.');