alert元件比較簡單,基本上就是展示不同的樣式, 只有一個關閉事件。(有問題歡迎指正與討論 也可以來小站逛逛)
結構
<transition name="el-alert-fade">
<!--
typeClass:根據傳入的type控制樣式
center: 根據傳入的center控制內容是否居中
role:屬性作用是告訴Accessibility類應用(比如螢幕朗讀程式,為盲人提供的訪問網路的便利程式),這個元素所扮演的角色,主要是供殘疾人使用。使用role可以增強文字的可讀性和語義化。
-->
<div
class="el-alert"
:class="[typeClass, center ? 'is-center' : '']"
v-show="visible"
role="alert"
>
<!--
showIcon: 控制是否顯示icon
iconClass: 根據傳入的type動態控制icon的樣式
isBigIcon: 如果傳入了description(輔助性文字)或者 插槽內傳入了內容 則顯示大icon
-->
<i class="el-alert__icon" :class="[ iconClass, isBigIcon ]" v-if="showIcon"></i>
<div class="el-alert__content">
<!-- 如果傳入了description(輔助性文字)或者 傳入了匿名插槽 則顯示加粗title -->
<span class="el-alert__title" :class="[ isBoldTitle ]" v-if="title">{{ title }}</span>
<!-- 傳入插槽內容則顯示插槽內容 未傳入預設顯示slot內的內容description -->
<slot>
<p class="el-alert__description" v-if="description">{{ description }}</p>
</slot>
<!--
closable: 是否顯示關閉按鈕,預設顯示
closeText: 關閉按鈕自定義文字,無顯示X有顯示文字
-->
<i class="el-alert__closebtn" :class="{ 'is-customed': closeText !== '', 'el-icon-close': closeText === '' }" v-show="closable" @click="close()">{{closeText}}</i>
</div>
</div>
</transition>
複製程式碼
props
props: {
// 接收標題
title: {
type: String,
default: '',
required: true
},
// 輔助性文字
description: {
type: String,
default: ''
},
// 接收主題 computed裡會根據不同type返回對應的樣式
type: {
type: String,
default: 'info'
},
// 關閉按鈕顯示
closable: {
type: Boolean,
default: true
},
// 關閉按鈕自定義文字
closeText: {
type: String,
default: ''
},
// 是否顯示icom
showIcon: Boolean,
// 內容是否居中
center: Boolean
}
複製程式碼
computed
computed: {
// alert的樣式
typeClass() {
return `el-alert--${this.type}`
},
// alert裡icon的樣式
iconClass() {
return TYPE_CLASSES_MAP[this.type] || 'el-icon-info'
},
// 如果傳入了description(輔助性文字)或者 傳入了匿名插槽 則顯示大icon
isBigIcon() {
return this.description || this.$slots.default ? 'is-big' : ''
},
// 如果傳入了description(輔助性文字)或者 傳入了匿名插槽 則顯示加粗title
isBoldTitle() {
return this.description || this.$slots.default ? 'is-bold' : ''
}
}
複製程式碼
methods
methods: {
// 關閉alert方法
close() {
// v-show隱藏alert
this.visible = false
// 向父元件暴露close方法
this.$emit('close')
}
}
複製程式碼
data
data() {
return {
// 元件顯示隱藏
visible: true
}
}
複製程式碼
學習
動態class
class繫結傳送門- 陣列寫法
- 物件寫法
- 更復雜的情況可以用陣列組合物件的寫法
role屬性
:無障礙網頁應用,讀屏軟體會用到。W3c傳送門$slots.default
: 獲取所有匿名插槽分發的內容 $slots官方傳送門