由于项目中经常会用到alert这种组件,这种组件一般是在js中被调用,vue中组件主要是使用了标签的形式,
现记录通过Vue.extend实现的动态组件
Vue-extend官网链接
官网案例
// 创建实例
var Profile = Vue.extend({
template: '<p>{{firstName}} {{lastName}} aka {{alias}}</p>',
data: function () {
return {
firstName: 'Walter',
lastName: 'White',
alias: 'Heisenberg'
}
}
})
// 创建 Profile 实例,并挂载到一个元素上。
new Profile().$mount('#mount-point')
alert实例开发
官网的案例还是很清楚的,现在我们给予官网的实例拓展alert组件如何开发。
我们需要新建一个目录,目录中有俩个文件index.js和main.vue
main.vue
<template>
<transition name="el-message-fade">
<div v-show="visible" class="my-msg">{{message}}</div>
</transition>
</template>
<script >
export default{
data(){
return{
message:'', //需要提示用户的内容
visible:true //线上与隐藏
}
},
methods:{
close(){
setTimeout(()=>{
this.$emit("results","test"); // 自定义方法
this.visible = false; // 隐藏元素
this.$el.remove(); // 移除DOM
},2000)
},
},
mounted() {
this.close();
}
}
</script>
index.js
import Vue from 'vue';
import main from './main.vue';
let MyAlertConstructor = Vue.extend(main);
let instance;
var MyAlert=function(message){ //自定义传入的参数
// 创建实例并且过滤参数
instance= new MyAlertConstructor({
data:{
message:message
}})
// 挂载实例
instance.$mount();
document.body.appendChild(instance.$el)
return instance;
}
export default MyAlert;
使用
import Hint from '../brick/Hint/index.js'
Hint({name : 'name'}).$on('results', (text) => {
console.log(text);
});
网友评论