> 本文最初发表于[博客园](https://www.cnblogs.com/smyhvae/p/9195261.html),并在[GitHub](https://github.com/qianguyihao/Web)上持续更新**前端的系列文章**。欢迎在GitHub上关注我,一起入门和进阶前端。 > 以下是正文。 ## 前言 ### 什么是组件 **组件**: 组件的出现,就是为了拆分Vue实例的代码量的,能够让我们以不同的组件,来划分不同的功能模块,将来我们需要什么样的功能,就可以去调用对应的组件即可。 ### 模块化和组件化的区别 - 模块化:是从代码逻辑的角度进行划分的;方便代码分层开发,保证每个功能模块的职能单一 - 组件化:是从UI界面的角度进行划分的;前端的组件化,方便UI组件的重用 ## 全局组件的定义和注册 组件`Component`是 Vue.js 最强大的功能之一。组件可以扩展 HTML 元素,封装可重用的代码。 全局组件的定义和注册有三种方式,我们接下来讲一讲。 ### 写法一 写法一:使用Vue.extend方法定义组件,使用 Vue.component方法注册组件。 代码举例: ```html Document
``` 上方代码中,在注册组件时,第一个参数是标签名,第二个参数是组件的定义。 运行结果如下: ![](http://img.smyhvae.com/20180422_2230.png) 代码截图如下: ![](http://img.smyhvae.com/20180422_2223.png) 上图中,注意两点: **注意1**、红框部分,要保证二者的名字是一致的。如果在注册时,组件的名称是**驼峰命名**,比如: ```javascript Vue.component('myComponent', myAccount); //第一个参数是组件的名称(标签名),第二个参数是模板对象 ``` 那么,在标签中使用组件时,需要把大写的驼峰改为小写的字母,同时两个单词之间使用`-`进行连接: ```html ``` 所以,为了避免名字不一致的问题,我们注册组件时,组件的名称可以直接写成`my-component`。比如:(避免驼峰不一致的建议写法) ```javascript Vue.component('my-component', myAccount); ``` **注意2**、绿框部分,一定要用一个大的根元素(例如`
`)包裹起来。如果我写成下面这样,就没有预期的效果: ``` template: '

登录页面

注册页面

' ``` 结果如下:(并非预期的效果) ![](http://img.smyhvae.com/20180422_2232.png) ### 写法二 写法二:Vue.component方法定义、注册组件(一步到位)。 代码如下: ```html Document
``` 代码截图如下: ![](http://img.smyhvae.com/20180422_2251.png) 上图中,同样注意两点: 1、红框部分,要保证二者的名字是一致的。 2、绿框部分,一定要用一个大的根元素(例如`
`)包裹起来。如果我写成下面这样,就没有预期的效果: ``` template: '

登录页面

注册页面

' ``` 结果如下:(并非预期的效果) ![](http://img.smyhvae.com/20180422_2232.png) ### 写法三【荐】 > 上面的写法一、写法二并不是很智能,因为在定义模板的时候,没有智能提示和高亮,容易出错。我们不妨来看看写法三。 写法三:将组件内容定义到template标签中去。 代码如下: ```html Document
``` 代码截图如下: ![](http://img.smyhvae.com/20180422_2256.png) 写法三其实和方法二差不多,无非是把绿框部分的内容,单独放在了`