什么是組件?
組件的出現,就是為了拆分Vue實例的代碼量的,能夠讓我們以不同的組件,來划分不同的功能模塊,將來我們需要什么樣的功能,就可以去調用對應的組件就可以了。
組件化和模塊化的區別
- 模塊化:是從代碼邏輯的角度進行划分的,方便代碼分層開發,保證每個模塊功能的職能單一。例如:NodeJS
- 組件化:是從UI界面的角度進行划分的,前端的組件化,方便UI組件的重用
方式一
使用 Vue.extend 配合 Vue.component 來進行創建全局組件
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<title>獨秀不愛秀</title>
</head>
<body>
<div id="app">
<!-- 如果要使用組件,直接把組件的名稱,以 HTML 標簽的形式,引入到頁面中 -->
<mycom1></mycom1>
</div>
<script src="./lib/vue-2.4.0.js"></script>
<script type="text/javascript">
// 1.1 使用 Vue.extend 來創建全局的 Vue 組件
const com1 = Vue.extend({
template: '<h3>這是使用 Vue.extent 創建的組件</h3>'// 通過 template 屬性,指定組件要展示的 HTML 結構
});
// 1.2 使用 Vue.component('組件的名稱', 創建出來的組件模板對象)
// Vue.component('myCom1', com1);
// 如果使用 Vue.component 定義全局組件的時候,組件名使用了 駝峰命名,則
// 在引用的時候,需要把大寫字符改為小寫字符,同時,兩個單詞連接使用 -
Vue.component('mycom1', com1);
const vm = new Vue({
el: '#app',
data: {},
methods: {}
});
</script>
</body>
</html>
當然,方式一也可以直接將第一步驟省略,直接:
Vue.component('mycom1', Vue.extend({
template: '<h3>這是使用 Vue.extend 創建的組件</h3>'
}));
方式二
直接使用 Vue.component 創建組件(其實就是在方式一的基礎上更加省略而已)
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<title>獨秀不愛秀</title>
</head>
<body>
<div id="app">
<mycom2></mycom2>
</div>
<script src="./lib/vue-2.4.0.js"></script>
<script type="text/javascript">
/**
* 2. 直接使用 Vue.component 創建組件
* @param1 {String} 組件的名稱
* @param2 {Object} 組件模板對象
*/
Vue.component('mycom2', {
// 注意:無論是哪種方式創建出來的組件,組件的模板中必須有且只有一個唯一的根元素
template: '<div><h1>這是直接用 Vue.component 創建的組件</h1><span>123</span></div>'
});
const vm = new Vue({
el: '#app',
data: {},
methods: {}
});
</script>
</body>
</html>
方式三
在 方式二的基礎上將第二個參數中的HTML代碼結構,替換為一個 ID:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<title>獨秀不愛秀</title>
</head>
<body>
<div id="app">
<mycom3></mycom3>
</div>
<!-- 在被控制的 #APP 外面,使用 template 元素定義組件的模板結構 -->
<template id="tmpl">
<div>
<h1>這是通過 template 元素,在外部定義的組件結構,這個方式,有代碼的智能提示和高亮</h1>
<h3>不錯,好用</h3>
</div>
</template>
<script src="./lib/vue-2.4.0.js"></script>
<script type="text/javascript">
Vue.component('mycom3', {
template: '#tmpl'
});
const vm = new Vue({
el: '#app',
data: {},
methods: {}
});
</script>
</body>
</html>
