类似 element ui 中的 this.$message.success('提交成功')
这种通用组件是怎么生成的?
–Loading
|Loading.vue
|index.js
Loading.vue1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23<template>
<div v-show="show" class="loading"></div>
</template>
<script>
export default {
name: "loading",
props: {},
data() {
return {
show: false
};
},
methods: {
init() {}
},
mounted() {
this.init();
}
};
</script>
<style lang="scss" scoped>
...
</style>
index.js1
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
30import Vue from 'vue'
import Loading from "./Loading"
const LoadingConstructor = Vue.extend(Loading);
const Ld = {
init() {
if (this.is_inited) {
return;
}
this.is_inited = true;
this.instance = new LoadingConstructor({
data: {},
});
this.instance.vm = this.instance.$mount(); // $mount() 没有参数时,模板将被渲染为文档之外的元素
document.body.appendChild(this.instance.$el); // 这种情况下必须使用原生 DOM API 把它插入文档中
this.instance.dom = this.instance.$el;
},
show() {
this.init();
this.instance.vm.show = true; // 可直接操作 Loading.vue 的 data
},
hide() {
this.init();
this.instance.vm.show = false;
},
}
export default Ld;
使用1
2
3
4
5import Ld from "xxx/Loading";
Ld.show();
or
Ld.hide();
当然也可以挂下 Vue 下
main.js1
2
3
4import Vue from 'vue'
import Loading from "xxx/Loading";
Vue.prototype.$loading = Loading;
在其它 vue 中1
2
3this.$loading.show();
or
this.$loading.hide();