Vue自定义组件遇到问题总结 toast频繁点击问题

这里写自定义目录标题


组件特点

  • 简单 功能比较单一
  • 可扩展性 props slot
  • 可维护性 (组件里面的字体颜色等等 可以使用变量
  1. 组件双向绑定 v-model
    自定义组件使用v-model ,props 默认value 接收,事件默认input ; 当然也可以自定义 model: {
    prop: xxx,
    event: xxx
    }
    比如我想创建一个弹窗组件

modal.vue:

<template>
<div v-show="value">
<div>
<slot>
<div @click="$emit('input', false)">自定义内容</div>
</slot>
</div>
</div>
</template>
export default {
 props: {
   value: {
   type: Boolean,
   default: false 
   }
 }
}

在使用的时候 就是直接引入modal.vue ,
index.vue

<template>
<div v-show="value">
<div>
<modal v-model="show"></modal>
</div>
</div>
</template>
import modal from './modal.vue'
export default {
components: {
  modal
},
data() {
   return {
   show: false
   }
}
}
  1. 自定义vue插件,挂在到vue 原型上 ,vue的实力都可以使用
    步骤:
  • 先创建toast.vue 界面 把样式调试完整
  • 创建toast.js文件,引入toast.vue
import toast from ./toast.vue
var constr, instanceObj,mountVobj,domEl;
var timer=null;
Toast.install=function(Vue){
  Vue.prototype.$toast = function(msg){
     if(!constr) {
       constr = Vue.extend(toast); //创建vue 构造器
       instanceObj = new constr(); //创建实力对象
       mountVobj = instanceObj.$mount(); //挂载
       domEl = mountVobj.$el; //获取dom元素
       document.body.appendChild(domEl); //拼接到body上
     }
     if(mountVobj.show || timer) {
     //toast 频繁点击问题
        clearTimer(timer)
        timer = null
     }
     timer = setTimout(function() {
        clearTime(timer)
        timer = null
        mountVobj.updateShowStatus(false)
     }, 2000)

      
  }
}

如果对你有帮助,麻烦点个赞 谢谢~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值