- 原理就是把组件对象挂载到在
body
上创建出来的一个空div
上
原理
步骤(以创建一个Toast)
- 创建一个vue文件,写入想要封装的组件(这里以toast弹出框为例),调整组件样式
<template >
<div class="toast">
<div>{{message}}</div>
</div>
</template>
<script>
export default {
name:"Toast",
data() {
return {
message:'',
isShow:false
}
},
methods: {
show(message = "message",duration=2000){
this.isShow = true
this.message = message
setTimeout(()=>{
this.isShow = false
this.message = ''
},duration)
}
},
}
</script>
<style scoped>
.toast{
position: fixed;
top: 50%;
left: 50%;
color: #fff;
background-color: rgba(0, 0, 0, 0.5);
}
</style>
-
创建js文件,导入创建好的组件,新建一个对象
-
创建组件构造器
-
new的方式,根据组件构造器,可以创建出来一个组件对象
-
将组建对象手动挂载到某一元素上
-
toast.$el对应的就是对应的div上的
-
将组件对象放在Vue原型
import Toast from './Toast.vue'
const obj = {}
obj.install = function(Vue){
//创建组件构造器
const toastContrustor = Vue.extend(Toast)
//new的方式,根据组件构造器,可以创建出来一个组件对象
const toast = new toastContrustor()
//将组建对象手动挂载到某一元素上
toast.$mount(document.createElement('div'))
//toast.$el对应的就是对应的div上的
document.body.appendChild(toast.$el)
Vue.prototype.$toast = toast
}
export default obj
- 在main.js文件中导入上面的js文件,使用插件,挂载到页面上
import Toast from 'components/common/Toast/index.js'
Vue.use(Toast)
new Vue({
render: h => h(App),
router,
store
}).$mount('#app')
- 使用
this.$toast.show(res,2000)
网友评论