Vue.js 的组件实际上就是一个可以被复用的 Vue 实例,通常我们的一个应用可以使用无数个组件进行拼装完成。如果我们将应用想象成一栋房子,那么组件可以是砖块、窗户、门等等。将砖块、窗户和门按照给定的图纸组装在一起就是一栋房子,也就是一个应用了。
Vue.js 的组件系统让我们可以用独立可复用的小组件来构建大型应用,几乎任意类型的应用的界面都可以抽象为一个组件树。如下图:

例如,你可能会有页头、侧边栏、内容区等组件,每个组件又包含了其它的像导航链接、博文之类的组件。
为了能在模板中使用,这些组件必须先注册以便 Vue 能够识别。这里有两种组件的注册类型:全局注册和局部注册。至此,我们的组件都只是通过 Vue.component 全局注册的:
// 全局注册
Vue.component('my-component-name', {
// ... options ...
})注意:全局注册的组件可以用在其被注册之后的任何 (通过 new Vue) 新创建的 Vue 根实例,也包括其组件树中的所有子组件的模板中。
该示例将演示一个简单的页面,该页面通过三个自定义 Vue 组件组成,代码如下:
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Vue</title>
<!-- 使用 CDN 引入 Vue 库 -->
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
</head>
<body>
<div id="app">
<!-- 页面头 -->
<page-head></page-head>
<div>
<div style="float:left;">
<!-- 页面栏目 -->
<page-part></page-part>
</div>
<!-- 页面正文 -->
<page-content></page-content>
</div>
</div>
<script type="text/javascript">
// 定义头部组件
Vue.component('page-head', {
data: function(){
return {
title: "Vue组件组合"
};
},
template: '<div style="height:100px;background:blue;">{{title}}</div>'
});
// 定义左边栏目组件
Vue.component('page-part', {
data: function(){
return {
parts: ["栏目1", "栏目2", "栏目3"]
};
},
template: '<div style="background:yellow;height:200px;width:150px;">' +
'<ul style="margin:0;">' +
' <li v-for="item in parts">{{item}}</li>' +
'</ul></div>'
});
// 定义正文部分组件
Vue.component('page-content', {
data: function(){
return {
content: "Hello Vue.js"
};
},
template: '<div style="background:red;height:200px;">{{content}}</div>'
});
var app = new Vue({
el: "#app",
data: {}
});
</script>
</body>
</html>运行效果如下图:
