This article introduces to you how to mount vue components globally? The introduction (code) of the method of mounting Vue components to the global system has certain reference value. Friends in need can refer to it. I hope it will be helpful to you.
In a recent project, bootstrap-vue was used for development. However, during the actual development process, we found that the components provided by this UI could not achieve the results we expected, such as alert and modal. When the component is introduced on each page, it must be introduced repeatedly. Unlike element, which can be called through this.$xxx, the question is, how to call the component we defined or the UI we use through this.$xxx? What about the components of the framework.
Taking the Alert component in bootstrap-vue as an example, proceed in several steps:
1. Define a vue file to re-encapsulate the original component
main.vue
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 | <template>
<b-alert
class = "alert-wrap pt-4 pb-4"
:show= "isAutoClose"
:variant= "type" dismissible
:fade= "true"
@dismiss- count -down= "countDownChanged"
@dismissed= "dismiss"
>
{{msg}}
</b-alert>
</template>
<script>
export default {
props: {
msg: {
type: [String, Number],
default : ''
},
type: {
type: String,
default : 'info'
},
autoClose: {
type: Boolean,
default : true
},
duration: {
type: Number,
default : 3
},
closed: {
type: Function,
default : null
}
},
methods: {
dismiss () {
this.duration = 0
},
countDownChanged (duration) {
this.duration = duration
}
},
computed: {
isAutoClose () {
if (this.autoClose) {
return this.duration
} else {
return true
}
}
},
watch: {
duration () {
if (this.duration === 0) {
if (this.closed) this.closed()
}
}
}
}
</script>
<style scoped>
.alert-wrap {
position: fixed;
width: 600px;
top: 80px;
left: 50%;
margin-left: -200px;
z-index: 2000;
font-size: 1.5rem;
}
</style>
|
Copy after login
This is mainly about the processing of component parameters and callback events, which is no different from other processing components
2. Define a js file and mount it on Vue, and match it with the one we defined Components interact
index.js
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 | import Alert from './main.vue'
import Vue from 'vue'
let AlertConstructor = Vue.extend(Alert)
let instance
let seed = 1
let index = 2000
const install = () => {
Object.defineProperty(Vue.prototype, '$alert' , {
get () {
let id = 'message_' + seed++
const alertMsg = options => {
instance = new AlertConstructor({
propsData: options
})
index++
instance.id = id
instance.vm = instance. $mount ()
document.body.appendChild(instance.vm. $el )
instance.vm. $el .style.zIndex = index
return instance.vm
}
return alertMsg
}
})
}
export default install
|
Copy after login
The main idea is to pass the value to the component by calling this method, and then append it to the body
3. Finally, it needs to be in main. Use it in js
1 2 | import Alert from '@/components/alert/index'
Vue. use (Alert)
|
Copy after login
4. Use
1 | this. $alert ({msg: '欢迎━(*`∀´*)ノ亻!' })
|
Copy after login
5. The encapsulation of confirim is also the same
main.vue
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 116 117 118 119 120 121 122 123 124 125 126 127 128 129 | <template>
<b-modal
v- if = "!destroy"
v-model= "isShow"
title= "温馨提示"
@change= "modalChange"
@show= "modalShow"
@shown= "modalShown"
@hide= "modalHide"
@hidden= "modalHidden"
@ok= "modalOk"
@cancel= "modalCancel"
:centered= "true"
:hide-header-close= "hideHeaderClose"
:no-close-on-backdrop= "noCloseOnBackdrop"
:no-close-on-esc= "noCloseOnEsc"
:cancel-title= "cancelTitle"
:ok-title= "okTitle" >
<p class = "my-4" >{{msg}}</p>
</b-modal>
</template>
<script>
export default {
props: {
isShow: {
type: Boolean,
default : true
},
msg: {
type: [String, Number],
default : ''
},
hideHeaderClose: {
type: Boolean,
default : false
},
cancelTitle: {
type: String,
default : '取消'
},
okTitle: {
type: String,
default : '确定'
},
noCloseOnBackdrop: {
type: Boolean,
default : true
},
noCloseOnEsc: {
type: Boolean,
default : true
},
change: {
type: Function,
default : null
},
show: {
type: Function,
default : null
},
shown: {
type: Function,
default : null
},
hide: {
type: Function,
default : null
},
hidden: {
type: Function,
default : null
},
ok: {
type: Function,
default : null
},
cancel: {
type: Function,
default : null
},
destroy: {
type: Boolean,
default : false
}
},
methods: {
modalChange () {
if (this.change) this.change()
},
modalShow () {
if (this.show) this.show()
},
modalShown () {
if (this.shown) this.shown()
},
modalHide () {
if (this.hide) this.hide()
},
modalHidden () {
if (this.hidden) this.hidden()
this.destroy = true
},
modalOk () {
if (this.ok) this.ok()
},
modalCancel () {
if (this.cancel) this.cancel()
}
}
}
</script>
|
Copy after login
index.js
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 | import Confirm from './main.vue'
import Vue from 'vue'
let ConfirmConstructor = Vue.extend(Confirm)
let instance
let seed = 1
let index = 1000
const install = () => {
Object.defineProperty(Vue.prototype, '$confirm' , {
get () {
let id = 'message_' + seed++
const confirmMsg = options => {
instance = new ConfirmConstructor({
propsData: options
})
index++
instance.id = id
instance.vm = instance. $mount ()
document.body.appendChild(instance.vm. $el )
instance.vm. $el .style.zIndex = index
return instance.vm
}
return confirmMsg
}
})
}
export default install
|
Copy after login
Recommended related articles:
Vue Mock.js implements the detailed steps of adding, deleting, modifying and checking simulated tables
How to get the parent component of the Vue neutron component value? (props implementation)
The above is the detailed content of How to mount vue components globally? Introduction to the method of mounting Vue components globally (code). For more information, please follow other related articles on the PHP Chinese website!