## 什么是组件? web的组件其实就是页面组成的一部分,好比是电脑中的每一个元件(如硬盘、键盘、鼠标),它是一个具有独立的逻辑和功能或界面,同时又能根据规定的接口规则进行相互融合,变成一个完整的应用。 web页面就是由一个个类似这样的部分组成的,比如导航、列表、弹窗、下拉菜单等。页面只不过是这些组件的容器,组件自由组合形成功能完整的界面,当不需要某个组件,或者想要替换某个组件时,可以随时进行替换和删除,而不影响整个应用的运行。 前端组件化的核心思路就是将一个巨大复杂的东西才分成粒度合理的小东西。 使用组件的好处: - 提高开发效率 - 方便重复使用 - 简化调试步骤 - 提升整个项目的课维护性 - 便于协同开发 组件(Component)是 Vue.js 最强大的功能之一。 组件可以扩展 HTML 元素,封装可重用的代码。 在较高层面上,组件是自定义元素, Vue.js 的编译器为它添加特殊功能。 在有些情况下,组件也可以是原生 HTML 元素的形式,以 is 特性扩展。 组件系统让我们可以用独立可复用的小组件来构建大型应用,几乎任意类型的应用的界面都可以抽象为一个组件树: ![](https://box.kancloud.cn/fc226560ec1d2a1ab549164f8837a00d_1406x544.png) vue.js的组件可以理解为预先定义好行为的ViewModel类。一个组件可以预先定义很多选项。但是最核心的是以下几个: - **模板(template)**——模板声明了数据和最终展现给用户的DOM之间的映射关系。 - **初始数据(data)**——一个组件的初始数据状态。对于可服用的组件来说,通常是私有的状态。 - **接受的外部参数(props)**——组件之间通过参数来进行数据的传递和共享。参数默认是单向绑定(由上至下),但也可以显式声明为双向绑定。 - **方法(methods)**——对数据的改动操作一般都在组件的方法内进行。可以通过v-on指令将用户输入事件和组件方法进行绑定。 - **生命周期钩子函数(lifecycle hooks)**——一个组件会触发多个生命周期钩子函数,比如created、attached、destroyed等。在这些钩子函数中,我们可以封装一些自定义的逻辑。和传统的MVC相比,这可以理解为Controller的逻辑被分散到了这些钩子函数中。