Vue.js组件开发

整理了一些前端学习资料,需要的免费领取。
直通车
前言

时至今日,Vue 仍然是前端开发者使用最多的框架之一,收藏也来到了 208.3 k





Vue 和 React 框架之所以如此火爆,其核心原因在于组件化的开发理念。组件作为一种可复用的代码单元,极大地提高了开发效率。在远古时期,开发者们常常需要重复编写大量的页面代码,不仅耗时耗力,而且容易出错。而组件化的出现,使得开发者可以将页面拆分成多个独立的组件,每个组件都可以独立开发、测试和维护。这样不仅可以减少重复代码,提高代码的可读性和可维护性,还能让开发者更加专注于每个组件的功能实现,从而大大提升了开发效率和代码质量。

本文将详细介绍 Vue.js 组件开发的相关知识,包括组件的基本概念、分类、设计结构、注册方式、参数传递以及开发过程中需要注意的事项。

在这里插入图片描述



一、什么是组件

1. 组件 ——大白话解释

Vue组件就像是一个预先做好的网页小部件,你可以把它想象成一个可以重复使用的拼图块。在Vue里,你可以把这些组件组合起来,拼成一个完整的网页。每个组件都有自己的功能和样式,让网页开发变得更方便、更快捷。

2. 组件的组织

这里引用官方的一句话——通常一个应用会以一棵嵌套的组件树的形式来组织:
在这里插入图片描述

例如,你可能会有页头、侧边栏、内容区等组件,每个组件又包含了其它的像导航链接、博文之类的组件。
那么左侧这个页面就可以差分开,分成若干小组件,而小组件又可以再次拆分成更小的组件,并且这些通常小组件通常是可以重复使用。





二、设计组件结构

1. 目录结构

通常各个组件会写在 components 文件夹内部,以便于管理和维护。例如:

在这里插入图片描述

2. 设计组件代码结构


通常包括模板、脚本、样式文件
也就是说在编写组件代码时,需要为每个组件编写 Vue 模板JavaScript 逻辑 和CSS 样式 。确保代码清晰、可维护。以下是一个简单的按钮组件示例:

<!-- Button.vue -->
<template>
  <button :class="buttonClass" @click="onClick">
    <slot></slot>
  </button>
</template>

<script>
export default {
  props: {
    type: {
      type: String,
      default: 'default'
    }
  },
  computed: {
    buttonClass() {
      return `btn btn-${this.type}`;
    }
  },
  methods: {
    onClick() {
      this.$emit('click');
    }
  }
}
</script>

<style scoped>
.btn {
  padding: 8px 16px;
  border: none;
  border-radius: 4px;
}
</style>



三、组件注册


在Vue 中,组件的注册分为全局注册和局部注册两种方式。下面我将分别介绍这两种注册方式的使用方法,并给出相应的代码案例。

1、全局注册

全局注册是指将组件注册到 Vue的根 实例上,这样所有的Vue实例都可以使用这个组件。全局注册通常是在创建Vue实例之前进行的。

使用方法

  1. 引入或定义组件。
  2. 使用Vue.component方法进行全局注册。
// 1. 引入或定义组件
Vue.component('my-component', {
  template: '<div>这是一个全局注册的组件</div>'
});

// 2. 创建Vue实例
new Vue({
  el: '#app',
  // 在模板中可以直接使用全局注册的组件
  template: '<div><my-component></my-component></div>'
});

在上面的代码中,我们全局注册了一个名为my-component的组件,然后在Vue实例的模板中直接使用了这个组件。

2、 局部注册

局部注册是指将组件注册到某个Vue实例的components选项中,这样这个组件只能在该Vue实例的模板中使用。

  1. 引入或定义组件。
  2. 在Vue实例的components选项中进行局部注册。

代码案例

// 1. 引入或定义组件
const MyComponent = {
  template: '<div>这是一个局部注册的组件</div>'
};

// 2. 创建Vue实例,并在components选项中进行局部注册
new Vue({
  el: '#app',
  components: {
    'my-component': MyComponent
  },
  // 在模板中可以使用局部注册的组件
  template: '<div><my-component></my-component></div>'
});

四、组件参数传递


父子组件:

上述我们了解了组件,那什么是父子组件呢?
在Vue中,父子组件是一种组件之间的层级关系,用于构建和组织复杂的用户界面。这种关系类似于现实生活中的父子关系,其中父组件是包含和管理子组件的实体。

父组件

父组件是包含其他组件的组件。它负责为子组件提供上下文环境,并可以通过props向子组件传递数据。父组件通常负责整体的布局和逻辑,而具体的实现细节则交给子组件来处理。

子组件

子组件是被父组件包含和管理的组件。它接收来自父组件的数据(通过props),并根据这些数据来渲染自己的视图。子组件通常负责实现具体的功能或展示特定的信息。

父子组件的关系

  1. 层级关系:父组件包含子组件,子组件是父组件的一部分。这种层级关系有助于组织和管理复杂的用户界面。

  2. 数据传递:父组件可以通过props向子组件传递数据,子组件则不能直接修改这些数据(除非通过事件或其他方式通知父组件进行修改)。

  3. 独立性:子组件是相对独立的,它们可以被复用在不同的父组件中。这种独立性有助于提高代码的可复用性和可维护性。

  4. 事件通信:子组件可以通过$emit方法向父组件发送事件,父组件可以监听这些事件并作出相应的响应。这是子组件与父组件进行交互的一种方式。

在Vue中,父子组件之间的传参是通过props$emit来实现的。父组件可以通过props向子组件传递数据,而子组件可以通过$emit向父组件发送事件并传递参数。

在这里插入图片描述

1、父组件向子组件传参

父组件向子组件传参是通过props属性实现的。在父组件中,你可以将需要传递给子组件的数据绑定到子组件标签的props属性上。

<!-- 父组件模板 -->
<div id="app">
  <child-component :message="parentMessage"></child-component>
</div>

<script>
  // 子组件定义
  Vue.component('child-component', {
    props: ['message'],
    template: '<div>{{ message }}</div>'
  });

  // 父组件实例
  new Vue({
    el: '#app',
    data: {
      parentMessage: '这是父组件传递给子组件的消息'
    }
  });
</script>

在上面的代码中,父组件定义了一个parentMessage数据,并通过:message="parentMessage"将其传递给子组件。子组件通过props接收了这个数据,并在模板中展示出来。

2、子组件向父组件传参

子组件向父组件传参是通过$emit方法实现的。子组件可以在特定事件触发时调用$emit方法,向父组件发送事件并传递参数。父组件则可以通过监听这个事件来接收子组件传递的参数。

<!-- 父组件模板 -->
<div id="app">
  <child-component @send-message="receiveMessage"></child-component>
  <div>父组件接收到的消息:{{ receivedMessage }}</div>
</div>

<script>
  // 子组件定义
  Vue.component('child-component', {
    template: `
      <div>
        <button @click="sendMessage">发送消息给父组件</button>
      </div>
    `,
    methods: {
      sendMessage() {
        this.$emit('send-message', '这是子组件发送给父组件的消息');
      }
    }
  });

  // 父组件实例
  new Vue({
    el: '#app',
    data: {
      receivedMessage: ''
    },
    methods: {
      receiveMessage(message) {
        this.receivedMessage = message;
      }
    }
  });
</script>

在上面的代码中,子组件定义了一个sendMessage方法,该方法在按钮点击时调用$emit发送事件,并传递了一个消息字符串。父组件通过@send-message="receiveMessage"监听了这个事件,并在receiveMessage方法中接收了子组件传递的消息。




五、总结

本文简要阐述了Vue组件的基本概念及其核心要素。Vue组件作为构建用户界面的基本单元,根据其功能和职责可分为父组件和子组件,形成了清晰的层级结构。在设计结构上,组件遵循高内聚、低耦合的原则,确保每个组件都能独立运行且易于维护。




组件的注册方式灵活多样,既可以通过全局注册实现跨组件共享,也可以通过局部注册满足特定需求。在参数传递方面,父组件通过props向子组件传递数据,实现了组件间的数据流通。

然而,Vue组件的魅力远不止于此。监听组件事件动态组件的灵活切换组件插槽的扩展性以及解析DOM模板时的细节处理,都是组件开发中不可或缺的部分。此外,还有一些进阶的组件相关知识点和面试问题,更是对开发者掌握Vue组件能力的全面考验。






六、写在最后

如果你是一位前端工作者,或是正踏上前端学习之旅的同行者,那么不妨在此留下你的足迹。在这个充满无限可能的前端世界里,我们共同追求技术的卓越与创新的火花。欢迎你点赞、收藏、分享,以三联的方式加入我们的交流行列。在这里,我们可以分享心得,探讨难题,共同进步。无论是Vue的组件化开发,还是前端工程的优化实践,都是我们交流学习的宝贵话题。期待与你携手前行,在前端的道路上不断探索、成长。

看到这里的小伙伴,欢迎点赞、评论,收藏!

如有前端相关疑问,博主会在第一时间解答,也同样欢迎添加博主好友,共同进步!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值