Vue组件教程之Toast(Vue.extend 方式)详解


Posted in Javascript onJanuary 27, 2019

一、效果图

Vue组件教程之Toast(Vue.extend 方式)详解

二、说明

这类提示框组件我们通常都会直接在 JS 代码中进行调用。像下面这样:

this.$toast('别点啦,到头啦!')

但看到网上大多数还是通过 component 方式实现的,这样的话我们在使用的时候还要在 DOM 中放置一个组件元素,然后通过一个变量来控制它的显示隐藏,这样使用起来非常的不方便。那么有什么方法可以不用在 DOM 中手动放置组件元素就可以直接调用呢?答案就是 Vue.extend。通过 Vue.extend 方式实现的组件,需要两个文件,一个是 .vue 文件,另外一个就是管理 .vue 的 .js 文件。具体代码如下:

三、代码

Toast.vue 文件代码

<template>
 <div class="toast" v-show="visible">
 {{ message }}
 </div>
</template>

<script>
export default {
 name: 'toast',
 data () {
 return {
  message: '', // 消息文字
  duration: 3000, // 显示时长,毫秒
  closed: false, // 用来判断消息框是否关闭
  timer: null, // 计时器
  visible: false // 是否显示
 }
 },
 mounted () {
 this.startTimer()
 },
 watch: {
 closed (newVal) {
  if (newVal) {
  this.visible = false
  this.destroyElement()
  }
 }
 },
 methods: {
 destroyElement () {
  this.$destroy()
  this.$el.parentNode.removeChild(this.$el)
 },
 startTimer () {
  this.timer = setTimeout(() => {
  if (!this.closed) {
   this.closed = true
   clearTimeout(this.timer)
  }
  }, this.duration)
 }
 }
}
</script>

<style lang="scss" scoped>
.toast {
 position: fixed;
 bottom: 15vh;
 left: 28vw;
 min-width: 40vw;
 max-width: 100vw;
 font-size: 26px;
 text-align: center;
 padding: 10px 2vw;
 border-radius: 40px;
 background-color: rgba(0, 0, 0 , 0.6);
 color: rgb(223, 219, 219);
 letter-spacing: 3px;
}
</style>

Toast.js 文件代码

import Vue from 'vue'
import Toast from '@/components/layer/Toast.vue'

let ToastConstructor = Vue.extend(Toast) // 构造函数
let instance // 实例对象
let seed = 1 // 计数

const ToastDialog = (options = {}) => {
 if (typeof options === 'string') {
 options = {
  message: options
 }
 }
 let id = `toast_${seed++}`
 instance = new ToastConstructor({
 data: options
 })
 instance.id = id
 instance.vm = instance.$mount()
 document.body.appendChild(instance.vm.$el)
 instance.vm.visible = true
 instance.dom = instance.vm.$el
 instance.dom.style.zIndex = 999 + seed
 return instance.vm
}

export default ToastDialog

四、使用

首先在 main.js 中引入 Toast.js 并挂载到vue原型上,如下图:

Vue组件教程之Toast(Vue.extend 方式)详解

其次,在代码中使用

this.$toast('别点啦,到头啦!')

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
jquery 入门教程 [翻译] 推荐
Aug 17 Javascript
jquery photoFrame 图片边框美化显示插件
Jun 28 Javascript
复制js对象方法(详解)
Jul 08 Javascript
angularjs中的单元测试实例
Dec 06 Javascript
node.js中的events.emitter.removeAllListeners方法使用说明
Dec 10 Javascript
JS实现超过长度限制后自动跳转下一款文本框的方法
Feb 23 Javascript
Jquery异步提交表单代码分享
Mar 26 Javascript
javascript制作的滑动图片菜单
May 15 Javascript
js实现瀑布流的三种方式比较
Jun 28 Javascript
React创建组件的三种方式及其区别
Jan 12 Javascript
vue自定义js图片碎片轮播图切换效果的实现代码
Apr 28 Javascript
vue项目中定义全局变量、函数的几种方法
Nov 08 Javascript
JavaScript变量提升和严格模式实例分析
Jan 27 #Javascript
超详细动手搭建一个VuePress 站点及开启PWA与自动部署的方法
Jan 27 #Javascript
PWA介绍及快速上手搭建一个PWA应用的方法
Jan 27 #Javascript
原生JS检测CSS3动画是否结束的方法详解
Jan 27 #Javascript
原生JS实现的跳一跳小游戏完整实例
Jan 27 #Javascript
nuxt中使用路由守卫的方法步骤
Jan 27 #Javascript
vue-cli构建vue项目的步骤详解
Jan 27 #Javascript
You might like
php使用pdo连接sqlite3的配置示例
2016/05/27 PHP
Laravel构建即时应用的一种实现方法详解
2017/08/31 PHP
Laravel 实现数据软删除功能
2019/08/21 PHP
php pdo连接数据库操作示例
2019/11/18 PHP
Yii框架 session 数据库存储操作方法示例
2019/11/18 PHP
PHP编程一定要改掉的5个不良习惯
2020/09/18 PHP
Domino中运用jQuery读取视图内容的方法
2009/10/21 Javascript
百度Popup.js弹出框进化版 拖拽小框架发布 兼容IE6/7/8,Firefox,Chrome
2010/04/13 Javascript
Javascript 面试题随笔
2011/03/31 Javascript
jQuery动态添加删除select项(实现代码)
2013/09/03 Javascript
JavaScript判断表单提交时哪个radio按钮被选中的方法
2015/03/21 Javascript
AngularJS基础教程之简单介绍
2015/09/27 Javascript
Vuejs第六篇之Vuejs与form元素实例解析
2016/09/05 Javascript
canvas 弹幕效果(实例分享)
2017/01/11 Javascript
jQuery的三种bind/One/Live/On事件绑定使用方法
2017/02/23 Javascript
使用jQuery实现两个div中按钮互换位置的实例代码
2017/09/21 jQuery
Angular 向组件传递模板的两种方法
2018/02/23 Javascript
基于Vue2x的图片预览插件的示例代码
2018/05/14 Javascript
浅谈webpack4.x 入门(一篇足矣)
2018/09/05 Javascript
微信小程序如何修改本地缓存key中单个数据的详解
2019/04/26 Javascript
HTML+JavaScript实现扫雷小游戏
2019/09/30 Javascript
你不可不知的Vue.js列表渲染详解
2019/10/01 Javascript
jquery 遍历hash操作示例【基于ajax交互】
2019/10/12 jQuery
python装饰器深入学习
2018/04/06 Python
Python 实现大整数乘法算法的示例代码
2019/09/17 Python
jupyter notebook 增加kernel教程
2020/04/10 Python
基于Django快速集成Echarts代码示例
2020/12/01 Python
党员干部观看《周恩来四个昼夜》思想汇报
2014/09/10 职场文书
作风整顿剖析材料
2014/09/30 职场文书
护士长2014年终工作总结
2014/11/11 职场文书
2014年学生资助工作总结
2014/12/18 职场文书
工会工作个人总结
2015/03/03 职场文书
鉴史问廉观后感
2015/06/10 职场文书
2016大学生社会实践心得体会范文
2016/01/14 职场文书
2019餐饮行业创业计划书!
2019/06/27 职场文书
JavaScript圣杯布局与双飞翼布局实现案例详解
2022/08/05 Javascript