vue中組件的3種使用方式詳解
前言
組件是Vue.js最強大的功能之一。組件可以擴展HTML元素,封裝可重用的代碼。
在vue angular react三大前端框架的大前端時代。許多人選擇了vue,在 github 上的star,vue已經(jīng)超過react的數(shù)量了。雖然star并不能代表vue更強,不過在發(fā)展速度上看來,vue確實很快。

在模塊化的前端時代,萬物皆組件,vue學(xué)習(xí)組件是必不可少的。

可是在大多數(shù)人熟悉了純html、jq之后,在初次接觸vue的組件時候,卻是滿臉蒙蔽。
今天咱們以最簡單的方式,帶vue小白童鞋們,步入組件的世界~
咱們今天講三種組件使用方式
- 基本組件
- 全局組件
- 構(gòu)造組件
1. 基本組件四步驟
- 寫好組件(廢話~)
- 在頁面種引用組件
- 在components中聲明組件
- 在頁面上使用
咱們以一個button子組件為例
項目src結(jié)構(gòu):

組件一般都放在components文件夾下:
1.寫好子組件:
<template>
<button class="btn" :style="{color:color}">
<slot/> <!-- 插槽 -->
</button>
</template>
<script>
export default {
// 傳入子組件的參數(shù)寫到props
props: {
color: {
type: String, // 顏色參數(shù)類型
default: "#000" // 默認(rèn)黑色
}
}
}
</script>
<style scoped>
.btn {
width: 110px;
height: 60px;
border-radius: 10px;
border: none;
font-size: 15px;
}
</style>
2.3.4.父組件:
<template>
<div id="app">
<!-- 4. 在頁面上使用 -->
<Button color="red">我是插槽的值</Button>
</div>
</template>
<script>
// 2. 在頁面種引用組件
import Button from '@/components/Button.vue'
export default {
name: "app",
// 3. 在components中聲明組件
components: {
Button
}
};
</script>
效果:

2. 全局組件五步驟
- 寫好組件(還是廢話~)
- 子組件添加install方法
- 在 main.js 中引用
- 使用 Vue.use 方法
- 在頁面上使用
1.子組件還是那樣~~:
2. 子組件添加install方法
Button.js :
import ButtonComponent from './Button.vue'
// 添加install方法 (插件方法)
const Button = {
install: function (Vue) {
Vue.component("Button", ButtonComponent);
}
}
// 導(dǎo)出Button
export default Button
當(dāng)然 你可以處理多個全局組件:
import ButtonComponent1 from './Button1.vue'
import ButtonComponent2 from './Button2.vue'
import ButtonComponent3 from './Button3.vue'
const buttonList = [
ButtonComponent1,
ButtonComponent2,
ButtonComponent3
];
// 添加install方法 (插件方法)
const Button = {
install: function (Vue) {
buttonList.forEach(button=>{
// 這里 使用每個組件的 name 屬性作為組件名
Vue.component(button.name, button);
})
}
}
// 導(dǎo)出Button
export default Button
3.4. main.js
import Vue from 'vue'
import App from './App.vue'
// 3
import Button from '@/components/Button.js'
// 4
Vue.use(Button);
new Vue({
render: h => h(App),
}).$mount('#app')
5. 在頁面上使用
app.vue:
<template> <div id="app"> <!-- 5. 在頁面上使用 --> <Button color="blue">我是全局按鈕</Button> </div> </template>
效果如下:

2. 構(gòu)造組件四步驟
- 寫好組件(還**是廢話~)
- vue.extend構(gòu)建組件
- 掛載 Vue.prototype
- 在js中使用
1.寫好子組件:
<template>
<p class="Message">{{value}}</p>
</template>
<script>
export default {
data() {
return {
value: "我是一個彈框"
};
}
};
</script>
<style>
.Message {
position: fixed;
bottom: 30px;
width: 200px;
background-color: rgba(0, 0, 0, 0.5);
color: #fff;
border-radius: 10px;
left: 50%;
transform: translateX(-50%);
line-height: 30px;
text-align: center;
font-size: 15px;
animation: messageFade 3s 1;
}
/* 加個簡單動畫 */
@keyframes messageFade {
0% {
opacity: 0;
-webkit-transform: translate3d(-50%, 80%, 0);
transform: translate3d(-50%, 80%, 0);
}
16% {
opacity: 1;
-webkit-transform: translate3d(-50%, 0, 0);
transform: translate3d(-50%, 0, 0);
}
84% {
opacity: 1;
-webkit-transform: translate3d(-50%, 0, 0);
transform: translate3d(-50%, 0, 0);
}
100% {
opacity: 0;
-webkit-transform: translate3d(-50%, 80%, 0);
transform: translate3d(-50%, 80%, 0);
}
}
</style>
2. vue.extend構(gòu)建組件
Message.js :
import Vue from 'vue';
import Message from './Message.vue';
// 構(gòu)造組件
const MessageConstructor = Vue.extend(Message);
// 設(shè)置刪除組件
const removeDom = (target) => {
target.parentNode.removeChild(target);
};
// 構(gòu)造組件添加關(guān)閉方法
MessageConstructor.prototype.close = function() {
this.visible = false;
removeDom(this.$el);
};
const MessageDiv = (options) => {
// 實例化組件
const instance = new MessageConstructor({
el: document.createElement('div'),
// 組件參數(shù),運用到組件內(nèi)的data
data: options,
});
// 在body添加組件
document.body.appendChild(instance.$el);
Vue.nextTick(() => {
instance.timer = setTimeout(() => {
// 定時關(guān)閉組件
instance.close();
}, 3000);
});
return instance;
};
export default MessageDiv;
3. 掛載 Vue.prototype
main.js :
import Message from '@/components/Message.js' Vue.prototype.$message = Message;
4. 使用:
<template>
<div id="app">
<Button color="blue" @click.native="msg">我是全局按鈕</Button>
</div>
</template>
<script>
import Button from "@/components/Button.vue";
export default {
name: "app",
components: {
Button
},
methods: {
msg() {
// 4. 使用構(gòu)造組件
this.$message({value:'我是構(gòu)造組件'});
}
}
};
</script>
效果:

以上就是三種組件的基本使用啦~~
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。
相關(guān)文章
一步步從Vue3.x源碼上理解ref和reactive的區(qū)別
vue3的數(shù)據(jù)雙向綁定,大家都明白是proxy數(shù)據(jù)代理,但是在定義響應(yīng)式數(shù)據(jù)的時候,有ref和reactive兩種方式,如果判斷該使用什么方式,是大家一直不很清楚地問題,下面這篇文章主要給大家介紹了關(guān)于從Vue3.x源碼上理解ref和reactive的區(qū)別的相關(guān)資料,需要的朋友可以參考下2023-02-02
vue router總結(jié) $router和$route及router與 router與route區(qū)別
這篇文章主要介紹了vue router總結(jié) $router和$route及router與 router與route區(qū)別,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值 ,需要的朋友可以參考下2019-07-07
element table跨分頁多選及回顯的實現(xiàn)示例
本文主要介紹了element table跨分頁多選及回顯的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-02-02
vue $set 實現(xiàn)給數(shù)組集合對象賦值
這篇文章主要介紹了vue $set 實現(xiàn)給數(shù)組集合對象賦值方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07
淺談vue獲得后臺數(shù)據(jù)無法顯示到table上面的坑
這篇文章主要介紹了淺談vue獲得后臺數(shù)據(jù)無法顯示到table上面的坑,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-08-08
關(guān)于vue3?解決getCurrentInstance?打包后線上環(huán)境報錯問題
這篇文章主要介紹了vue3?解決getCurrentInstance?打包后線上環(huán)境報錯問題,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-05-05

