props $emit

在 Vue 中,组件之间的通信可以通过父子组件之间传递 props 和子组件向父组件派发事件来实现。

  • 父组件向子组件传递 (props)
<div id="app">
    <child message="hello!"></child>
</div>

<script>
// 注册
Vue.component('child', {
  // 声明 props
  props: ['message'],
  template: '<span>{{ message }}</span>'
})
// 创建根实例
new Vue({
  el: '#app'
})
</script>

把 message 这个属性通过 props 传递给了子组件 child, 在子组件中声明 props,接收传递过来的数据

注意: 子组件接收到的 props 是只读的,不能直接修改。如果需要修改这些属性,应该通过事件的方式向父组件发送消息,让父组件去修改数据。

  • 子组件通过 $emit 方法来派发事件,并通过 $on 方法在父组件中监听事件。

具体来说,子组件可以通过$emit 方法来传递自定义事件,如下所示:

// 子组件
Vue.component('child-component', {
  template: '<button @click="onClick">Click me</button>',
  methods: {
    onClick() {
      this.$emit('custom-event', 'hello, parent');
    }
  }
});

在父组件中,可以通过v-on@ 指令来监听子组件传递的事件,并在方法中处理事件数据,如下所示:

<!-- 父组件 -->
<child-component @custom-event="handleEvent"></child-component>

<script>
  export default {
    methods: {
      handleEvent(data) {
        console.log(data); // 输出:hello, parent
      }
    }
  }
</script>

需要注意的是,子组件通过 $emit 方法派发的事件只能被父组件捕获,而不能被其他祖先组件或兄弟组件捕获。如果需要在多个组件之间进行通信,可以考虑使用 Vuex事件总线等机制。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。