Vue组件之非单文件组件用法及说明

 更新时间:2025年10月22日 10:59:56   作者:tianzhiyi1989sq  
本文系统介绍了Vue组件的概念、创建与命名规范、嵌套组织、核心原理及最佳实践,强调组件化开发可提升代码复用性和可维护性,并推荐在实际项目中使用单文件组件以优化开发体验和工程化水平

组件化是Vue.js最强大的特性之一,它允许我们将UI拆分为独立可复用的代码片段。

本文及后续几篇文章将全面解析Vue组件的各种概念和使用方法,通过丰富的实例演示组件开发的全过程,并提供最佳实践建议。

一、组件基础概念

1. 什么是组件?

组件是实现应用局部功能的代码和资源的集合,具有以下特点:

  • 可复用:可以在多个地方重复使用
  • 可组合:可以嵌套其他组件
  • 独立:拥有自己的数据、模板和逻辑

2. 组件化 vs 模块化

特性组件化模块化
关注点UI功能单元JS功能单元
组成包含HTML/CSS/JS纯JS代码
复用级别视图级别复用逻辑级别复用
典型使用场景构建用户界面组织业务逻辑

二、非单文件组件

1. 基本使用步骤

1.1 创建组件

// 使用Vue.extend创建组件
const Company = Vue.extend({
  template: `
    <div>
      <h2>公司名称:{{name}}</h2>
      <h2>公司地址:{{address}}</h2>
    </div>
  `,
  data() {
    return {
      name: "Vue Company",
      address: "北京"
    }
  }
})

注意事项

  • 不要指定el选项
  • data必须使用函数形式返回对象
  • template定义组件结构

1.2 注册组件

// 全局注册
Vue.component('company', Company)

// 局部注册
new Vue({
  el: '#app',
  components: {
    'company': Company
  }
})

注意:组件名与定义的组件同名时可简写成components:{company},

'company'也可不带引号

1.3 使用组件

<div id="app">
  <company></company>
</div>

2. 组件命名规范

命名方式示例适用场景
kebab-casemy-company所有场景,推荐HTML中使用
CamelCaseMyCompany需要Vue脚手架支持,推荐JS中使用

注意事项:

  • 避免与HTML原生标签冲突
  • 多单词名称必须使用短横线或驼峰命名
  • 可以使用name选项指定开发者工具中显示的名称

3. 组件标签写法

<!-- 完整写法 -->
<company></company>

<!-- 自闭合写法(需要脚手架支持) -->
<company/>

三、组件嵌套与组织

1. 组件嵌套示例

// 定义员工组件
const Employee = Vue.extend({
  template: `
    <div>
      <h3>员工姓名:{{name}}</h3>
      <h3>员工工号:{{id}}</h3>
    </div>
  `,
  data() {
    return {
      name: "张三",
      id: "1001"
    }
  }
})

// 定义公司组件(嵌套员工组件)
const Company = Vue.extend({
  template: `
    <div>
      <h2>公司名称:{{name}}</h2>
      <employee></employee>
    </div>
  `,
  components: {
    'employee': Employee
  },
  data() {
    return {
      name: "Vue Company"
    }
  }
})

// 定义App根组件
const App = Vue.extend({
  template: `
    <div>
      <company></company>
    </div>
  `,
  components: {
    'company': Company
  }
})

// 创建Vue实例
new Vue({
  el: '#app',
  template: '<App/>',
  components: { App }
})

2. 组件树结构

Vue实例 (vm)
└── App (vc)
    └── Company (vc)
        └── Employee (vc)

四、组件核心原理

1. VueComponent构造函数

  • 组件本质是VueComponent构造函数
  • Vue.extend自动生成
  • 每次调用Vue.extend都会返回全新的VueComponent

2. this指向问题

上下文this指向
Vue实例配置Vue实例对象 (vm)
组件配置VueComponent实例 (vc)

3. vm与vc的重要区别

特性Vue实例 (vm)VueComponent实例 (vc)
el选项支持不支持
data形式对象或函数必须为函数
使用场景根实例可复用组件
生命周期完整生命周期无beforeCreate和created

五、最佳实践与建议

1. 组件设计原则

  • 单一职责原则:每个组件只做一件事
  • 松耦合:尽量减少组件间的依赖
  • 高内聚:相关功能尽量放在同一个组件
  • 可复用性:设计可配置的通用组件

2. 组件组织建议

  • 合理划分组件层次结构
  • 避免过深的嵌套(一般不超过3层)
  • 公共组件放在全局注册
  • 业务组件按功能模块组织

3. 性能优化

  • 合理使用v-ifv-show控制组件渲染
  • 使用keep-alive缓存不活跃的组件
  • 大型组件考虑拆分为更小的子组件

六、从非单文件组件到单文件组件

非单文件组件适合简单场景,但在实际项目中,我们更推荐使用单文件组件(SFC):

<!-- Company.vue -->
<template>
  <div>
    <h2>公司名称:{{name}}</h2>
    <employee></employee>
  </div>
</template>

<script>
import Employee from './Employee.vue'

export default {
  name: 'Company',
  components: {
    Employee
  },
  data() {
    return {
      name: "Vue Company"
    }
  }
}
</script>

<style scoped>
h2 {
  color: #42b983;
}
</style>

单文件组件优势

  • 更好的代码组织
  • 支持预处理器
  • 作用域CSS
  • 更好的IDE支持

七、总结

Vue组件是构建现代Web应用的基石。通过本文我们了解了:

  • 组件的基本概念和创建方式
  • 组件的命名规范和使用方法
  • 组件的嵌套和组织结构
  • 组件的核心原理和实现机制
  • 组件开发的最佳实践

掌握组件化开发能够显著提高代码的可维护性和复用性。在实际项目中,建议结合Vue CLI使用单文件组件,这将带来更好的开发体验和更高的工程化水平。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 关于vue的npm run dev和npm run build的区别介绍

    关于vue的npm run dev和npm run build的区别介绍

    这篇文章主要介绍了关于vue的npm run dev和npm run build的区别介绍,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-01-01
  • vue3封装Notification组件的完整步骤记录

    vue3封装Notification组件的完整步骤记录

    在我们使用vue的开发过程中总会遇到这样的场景,封装自己的业务组件,下面这篇文章主要给大家介绍了关于vue3封装Notification组件的完整步骤,本文通过示例代码介绍的非常详细,需要的朋友可以参考下
    2022-03-03
  • 通过命令行生成vue项目框架的方法

    通过命令行生成vue项目框架的方法

    本篇文章主要介绍了通过命令行生成vue项目框架的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-07-07
  • 解决Vue-Router升级导致的Uncaught (in promise)问题

    解决Vue-Router升级导致的Uncaught (in promise)问题

    这篇文章主要介绍了解决Vue-Router升级导致的Uncaught (in promise)问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08
  • vue可拖拽的瀑布流布局组件实现详解

    vue可拖拽的瀑布流布局组件实现详解

    这篇文章主要为大家介绍了vue的可拖拽的瀑布流布局组件有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • 详解 vue better-scroll滚动插件排坑

    详解 vue better-scroll滚动插件排坑

    本篇文章主要介绍了详解 vue better-scroll滚动插件排坑,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-02-02
  • Vue网络请求的三种实现方式介绍

    Vue网络请求的三种实现方式介绍

    这篇文章主要介绍了Vue网络请求的三种实现方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-09-09
  • 如何通过URL来实现在Vue中存储业务状态实用技巧

    如何通过URL来实现在Vue中存储业务状态实用技巧

    这篇文章主要为大家介绍了如何通过URL来实现在Vue中存储业务状态实用技巧,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10
  • 通过原生vue添加滚动加载更多功能

    通过原生vue添加滚动加载更多功能

    这篇文章主要介绍了通过原生vue添加滚动加载更多功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • vue路由切换之淡入淡出的简单实现

    vue路由切换之淡入淡出的简单实现

    今天小编就为大家分享一篇vue路由切换之淡入淡出的简单实现,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-10-10

最新评论