# 一.Alert 警告(❤️❤️)
- 组件介绍 Layout 布局 (opens new window) 组件目录
# element-ui
├── packages # 放置element的组件(css样式放置在这个目录下theme-chalk下)
│ ├── alert
│ │ ├── src # alert组件
│ │ │ └── main.vue # 组件注册的入口文件
│ │ └── index.js # 组件注册的入口文件
1
2
3
4
5
6
2
3
4
5
6
# index.js
import Alert from "./src/main"
/* istanbul ignore next */
Alert.install = function(Vue) {
Vue.component(Alert.name, Alert)
}
export default Alert
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
在 vue 项目中通过引用这个组件,然后通过 vue.use 加载这个组件,内部会调用 install 方法,将组件加载到 Vue 实例内部
# main.vue
<template>
<transition name="el-alert-fade">
<div
class="el-alert"
:class="[typeClass, center ? 'is-center' : '', 'is-' + effect]"
v-show="visible"
role="alert"
>
<i
class="el-alert__icon"
:class="[iconClass, isBigIcon]"
v-if="showIcon"
></i>
<div class="el-alert__content">
<span
class="el-alert__title"
:class="[isBoldTitle]"
v-if="title || $slots.title"
>
<slot name="title">{{ title }}</slot>
</span>
<p class="el-alert__description" v-if="$slots.default && !description">
<slot></slot>
</p>
<p class="el-alert__description" v-if="description && !$slots.default">
{{ description }}
</p>
<i
class="el-alert__closebtn"
:class="{
'is-customed': closeText !== '',
'el-icon-close': closeText === '',
}"
v-show="closable"
@click="close()"
>{{ closeText }}</i
>
</div>
</div>
</transition>
</template>
<script type="text/babel">
const TYPE_CLASSES_MAP = {
success: "el-icon-success",
warning: "el-icon-warning",
error: "el-icon-error",
}
export default {
name: "ElAlert",
props: {
title: {
type: String,
default: "",
},
description: {
type: String,
default: "",
},
type: {
type: String,
default: "info",
},
closable: {
type: Boolean,
default: true,
},
closeText: {
type: String,
default: "",
},
showIcon: Boolean,
center: Boolean,
effect: {
type: String,
default: "light",
validator: function(value) {
return ["light", "dark"].indexOf(value) !== -1
},
},
},
data() {
return {
visible: true,
}
},
methods: {
close() {
this.visible = false
this.$emit("close")
},
},
computed: {
typeClass() {
return `el-alert--${this.type}`
},
iconClass() {
return TYPE_CLASSES_MAP[this.type] || "el-icon-info"
},
isBigIcon() {
return this.description || this.$slots.default ? "is-big" : ""
},
isBoldTitle() {
return this.description || this.$slots.default ? "is-bold" : ""
},
},
}
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115