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如何使用百度地图自定义信息窗口InfoWindow的样式

    Vue如何使用百度地图自定义信息窗口InfoWindow的样式

    这篇文章主要介绍了Vue如何使用百度地图自定义信息窗口InfoWindow的样式问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03
  • Vue利用路由钩子token过期后跳转到登录页的实例

    Vue利用路由钩子token过期后跳转到登录页的实例

    下面小编就为大家带来一篇Vue利用路由钩子token过期后跳转到登录页的实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • Vue.js更改调试地址端口号的实例

    Vue.js更改调试地址端口号的实例

    今天小编就为大家分享一篇Vue.js更改调试地址端口号的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-09-09
  • vuex中的state、getters、mutations、actions之间的关系解读

    vuex中的state、getters、mutations、actions之间的关系解读

    这篇文章主要介绍了vuex中的state、getters、mutations、actions之间的关系,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-10-10
  • vue+axios+promise实际开发用法详解

    vue+axios+promise实际开发用法详解

    这篇文章主要介绍了vue+axios+promise实际开发用法详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-10-10
  • IDEA运行Vue模块化npm过程

    IDEA运行Vue模块化npm过程

    下载Vue.js插件,配置npm后重启IDEA,运行npm run serve启动开发环境,总结个人经验,供参考
    2025-09-09
  • vue2.x双向数据绑定原理解析

    vue2.x双向数据绑定原理解析

    双向数据绑定原理主要运用了发布订阅模式来实现的,通过Object.defineProperty对数据劫持,触发getter,setter方法,这篇文章主要介绍了vue2.x双向数据绑定原理,需要的朋友可以参考下
    2023-02-02
  • Vue响应式原理模拟实现原理探究

    Vue响应式原理模拟实现原理探究

    这篇文章主要介绍了Vue响应式原理,响应式就是当对象本身(对象的增删值)或者对象属性(重新赋值)发生了改变的时候,就会运行一些函数,最常见的示render函数
    2022-09-09
  • Vue.js路由vue-router使用方法详解

    Vue.js路由vue-router使用方法详解

    这篇文章主要为大家详细介绍了Vue.js路由vue-router使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-03-03
  • vue模板语法-插值详解

    vue模板语法-插值详解

    这篇文章主要介绍了vue模板语法-插值,非常不错,具有参考借鉴价值,需要的朋友参考下
    2017-03-03

最新评论