Vue组件通信:父子组件之间的数据传递方法(组合式)

537 阅读3分钟

    Vue组件是Vue.js框架中的一种核心概念,它允许你将用户界面拆分成独立、可重用的模块。一个Vue组件封装了一个特定功能的代码块,包括HTML、CSS和JavaScript,使得代码更加模块化、可维护。 接下来就是组件通信的方法

u=2036861080,365606260&fm=253&app=138&size=w931&n=0&f=JPEG&fmt=auto.webp

vue组件的特性

  首先我们先了解一下

  1. 模板(Template) :定义了组件的HTML结构,通过Vue的模板语法进行书写。
  2. 脚本(Script) :包含了组件的逻辑代码,使用Vue实例中的数据、方法等。
  3. 样式(Style) :定义了组件的样式,可以使用普通的CSS,也可以使用预处理器如Sass或Less。
  4. 数据(Data) :组件可以拥有自己的数据,这些数据可以在模板中使用,也可以在脚本中进行处理。
  5. 生命周期钩子(Lifecycle Hooks) :Vue组件有一系列的生命周期钩子,允许你在组件生命周期的不同阶段执行代码,例如在组件创建、更新、销毁等阶段。
  6. 自定义事件(Custom Events) :组件可以通过自定义事件来实现与父组件或其他子组件的通信。

父子组件通信Props

定义组件:在Vue.js中,你可以使用 Vue.component 方法或者在单文件组件(.vue文件)中定义组件。一个组件通常包括模板、脚本、和样式。 Props是Vue中用于从父组件向子组件传递数据的一种方式。

<!-- 父组件 -->
<template>
  <div>
    <child-component :message="parentMessage"></child-component>
  </div>
</template>

<script>
import ChildComponent from './ChildComponent.vue';

export default {
  components: {
    ChildComponent
  },
  data() {
    return {
      parentMessage: 'Hello from parent'
    }
  }
}
</script>
<!-- 子组件 -->
<template>
  <div>
    <p>{{ message }}</p>
  </div>
</template>

<script>
export default {
  props: {
    message: String
  }
}
</script>

在使用组件时候有三个步骤:

  1. 引入组件: 在父组件中引入都是 import 组件名 from 组件文件的路径
  2. 放组件的位置<child-component:message="parentMessage"></child-component> 或者<child-component :message="parentMessage"/>
  3. 在components中声明一下组件名
  4. 父组件可以使用v-bind指令将需要传递的数据绑定到props上,子组件可以通过props选项来声明需要接收的props。

父子组件通信$emit

$emit 是 Vue.js 中用于触发自定义事件的方法。它在组件实例上调用,允许你传递自定义的事件名称以及可选的数据。父组件可以通过 v-on 监听这些自定义事件,并在事件被触发时执行相应的方法。

语法

this.$emit(eventName, [...args]);
  • eventName: 自定义事件的名称。
  • args (可选): 传递给事件处理函数的参数,可以是任意数量的参数。

示例

  1. 子组件触发事件,父组件监听

    在子组件中使用 $emit 触发自定义事件:

    <!-- ChildComponent.vue -->
    <template>
      <button @click="sendMessage">Send Message</button>
    </template>
    
    <script>
    export default {
      methods: {
        sendMessage() {
          // 触发自定义事件,并传递消息数据
          this.$emit('message-sent', 'Hello from child!');
        }
      }
    }
    </script>
    

    在父组件中监听并处理这个自定义事件:

    <!-- ParentComponent.vue -->
    <template>
      <div>
        <!-- 监听子组件的自定义事件 -->
        <child-component @message-sent="handleMessage"></child-component>
      </div>
    </template>
    
    <script>
    import ChildComponent from './ChildComponent.vue';
    
    export default {
      components: {
        'child-component': ChildComponent
      },
      methods: {
        handleMessage(message) {
          console.log(message); // 输出:Hello from child!
        }
      }
    }
    </script>
    
  2. 传递多个参数

    $emit 可以传递多个参数,这些参数会作为数组的形式传递给监听事件的处理函数:

    <!-- ChildComponent.vue -->
    <template>
      <button @click="sendData">Send Data</button>
    </template>
    
    <script>
    export default {
      methods: {
        sendData() {
          const data1 = 'Value 1';
          const data2 = 'Value 2';
          // 传递多个参数
          this.$emit('data-sent', data1, data2);
        }
      }
    }
    </script>
    
    <!-- ParentComponent.vue -->
    <template>
      <div>
        <child-component @data-sent="handleData"></child-component>
      </div>
    </template>
    
    <script>
    import ChildComponent from './ChildComponent.vue';
    
    export default {
      components: {
        'child-component': ChildComponent
      },
      methods: {
        handleData(data1, data2) {
          console.log(data1, data2); // 输出:Value 1 Value 2
        }
      }
    }
    </script>
    

  通过使用 $emit,你可以在 Vue 组件之间实现自定义事件的传递,从而实现更灵活的组件通信。 看完如果有所收获的话,欢迎👍点赞👍收藏👍以及评论区互动👍哦~另外如有错误❌或者遗漏的,欢迎评论指正!下一篇我们写一篇选项式的组件通信