在vue中封装可复用的组件方法


Posted in Javascript onMarch 01, 2018

本次封装的组件以toast组件为例

以前使用移动端ui插件时,通过一句代码比如 $.toast( ‘ 需要显示的内容 ' ),从而在页面上展示这段文字,并在一定时间后消失。

现在我们也尝试自己封装toast组件。

准备工作:vue-cli脚手架工程

先看一下涉及到的文件目录截图:

在vue中封装可复用的组件方法

这次的封装主要涉及的文件是Toast.vue toast.js Hello.vue,主要思路如下:

① Toast.vue是我们要使用的toast组件;

② toast.js里面用Vue.extend()扩展一个组件构造器,然后通过实例化组件构造器,就可创造出可复用的组件。

最后在toast.js里面导出函数myToast,函数myToast里面的逻辑在代码里面有解释;

③ Hello.vue里调用函数,显示组件。

Toast.vue代码:

<template>
	<div class="toast" v-if="isShow">
		<div class="toast-div">{{ text }}</div>
	</div>
</template>
<script>
export default{
	data(){
		return {
			text:'内容',
			isShow:true,
			duration:1500
		}
	}
}
</script>
<style>
*{
	margin: 0;
	padding: 0;
}
.toast{
 	position: fixed;
 	left: 50%;
 transform: translate(-50%, 0);
 margin-top: 5rem;
 background: #000000;
 line-height: 0.7rem;
	color: #FFFFFF;
	padding: 0 0.2rem;
	border-radius: 0.2rem;
}
</style>

Toast.js代码:

import Vue from 'vue'; 
import Toast from '@/components/Toast'; //引入组件 
let ToastConstructor = Vue.extend(Toast) // 返回一个“扩展实例构造器” 
 
let myToast = ()=>{ 
 let toastDom = new ToastConstructor({ 
 el:document.createElement('div') //将toast组件挂载到新创建的div上 
 }) 
 document.body.appendChild( toastDom.$el ) //把toast组件的dom添加到body里 
} 
export default myToast;

Hello.vue代码:

<template>
 <div class="hello">
 <button @click="showToast">按钮</button>
 </div>
</template>
<script>
import Vue from 'vue';
import toast from './js/toast'; //引入toast函数
Vue.prototype.$toast = toast;  //给Vue对象添加$toast方法
export default {
 name: 'hello',
 data () {
 return {
 
 }
 },
 methods:{
 	showToast(){
 		this.$toast();  //现在就可以调用了
 	}
 }
}
</script>

通过以上步骤,离真正的toast效果还是有区别的,我们要达到的效果是让显示的内容在一段时间后消失,那么,得从toast.js里面修改,得重新写myToast函数,给他设置两个传入参数,一个是显示的内容,一个是显示的时间。

toast.js修改后的代码如下:

import Vue from 'vue'; 
import Toast from '@/components/Toast'; //引入组件 
let ToastConstructor = Vue.extend(Toast) // 返回一个“扩展实例构造器” 
 
let myToast = (text,duration)=>{ 
 let toastDom = new ToastConstructor({ 
 el:document.createElement('div') //将toast组件挂载到新创建的div上 
 }) 
 document.body.appendChild( toastDom.$el ) //把toast组件的dom添加到body里 
 
 toastDom.text = text; 
 toastDom.duration = duration; 
 
 // 在指定 duration 之后让 toast消失 
 setTimeout(()=>{ 
 toastDom.isShow = false; 
 }, toastDom.duration); 
} 
export default myToast;

那么,现在我们在Hello.vue中调用的时候就应该是这样了:this.$toast('新内容',2000);我们的组toast组件可以正常使用了!

以上这篇在vue中封装可复用的组件方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JAVASCRIPT对象及属性
Feb 13 Javascript
详解JavaScript中的forEach()方法的使用
Jun 08 Javascript
jquery实现手机端单店铺购物车结算删除功能
Feb 22 Javascript
Bootstrap Table使用整理(三)
Jun 09 Javascript
解决vue路由后界面没有变化,但是链接有的问题
Sep 01 Javascript
vue实现多个元素或多个组件之间动画效果
Sep 25 Javascript
关于layui toolbar和template的结合使用方法
Sep 19 Javascript
Preload基础使用方法详解
Feb 03 Javascript
微信小程序图片右边加两行文字的代码
Apr 23 Javascript
简单了解前端渐进式框架VUE
Jul 20 Javascript
Vue文本模糊匹配功能如何实现
Jul 30 Javascript
JavaScript中layim之整合右键菜单的示例代码
Feb 06 Javascript
JavaScript判断日期时间差的实例代码
Mar 01 #Javascript
Vue 父子组件的数据传递、修改和更新方法
Mar 01 #Javascript
vue2.0 子组件改变props值,并向父组件传值的方法
Mar 01 #Javascript
浅谈vue单一组件下动态修改数据时的全部重渲染
Mar 01 #Javascript
vue 虚拟dom的patch源码分析
Mar 01 #Javascript
基于cropper.js封装vue实现在线图片裁剪组件功能
Mar 01 #Javascript
详解vue-cli 快速搭建单页应用之遇到的问题及解决办法
Mar 01 #Javascript
You might like
windows7下安装php的imagick和imagemagick扩展教程
2014/07/04 PHP
php CI框架插入一条或多条sql记录示例
2014/07/29 PHP
php字符比较函数similar_text、strnatcmp与strcasecmp用法分析
2014/11/18 PHP
php ucwords() 函数将字符串中每个单词的首字符转换为大写(实现代码)
2016/05/12 PHP
详解php与ethereum客户端交互
2018/04/28 PHP
js 获取子节点函数 (兼容FF与IE)
2010/04/18 Javascript
javascript面向对象编程(一) 实例代码
2010/06/25 Javascript
JS实现悬浮移动窗口(悬浮广告)的特效
2013/03/12 Javascript
js判断屏幕分辨率的代码
2013/07/16 Javascript
jQuery客户端分页实例代码
2013/11/18 Javascript
Node.js实现在目录中查找某个字符串及所在文件
2014/09/03 Javascript
jQuery实现倒计时按钮功能代码分享
2014/09/03 Javascript
JavaScript实现字符串与日期的互相转换及日期的格式化
2016/03/07 Javascript
详解Bootstrap的iCheck插件checkbox和radio
2016/08/24 Javascript
Bootstrap基本插件学习笔记之标签切换(17)
2016/12/08 Javascript
javascript添加前置0(补零)的几种方法
2017/01/05 Javascript
JavaScript中双符号的运算详解
2017/03/12 Javascript
实例详解vue.js浅度监听和深度监听及watch用法
2018/08/16 Javascript
微信网页登录逻辑与实现方法
2019/04/29 Javascript
js图片无缝滚动插件使用详解
2020/05/26 Javascript
这样回答继承可能面试官更满意
2019/12/10 Javascript
[02:28]DOTA2亚洲邀请赛 LGD战队巡礼
2015/02/03 DOTA
[02:19]DOTA选手解说齐贺岁
2018/02/11 DOTA
python算法学习之基数排序实例
2013/12/18 Python
Python实现的求解最大公约数算法示例
2018/05/03 Python
python3.4实现邮件发送功能
2018/05/28 Python
使用Python三角函数公式计算三角形的夹角案例
2020/04/15 Python
加拿大时尚床上用品零售商:QE Home | Quilts Etc
2018/01/22 全球购物
美国家用和厨房电器销售网站:Appliances Connection
2020/01/24 全球购物
简述进程的启动、终止的方式以及如何进行进程的查看
2014/02/20 面试题
数控专业个人求职信范例
2013/11/29 职场文书
入股协议书范本
2014/04/14 职场文书
在校实习生求职信
2014/06/18 职场文书
幼儿园安全管理制度
2015/08/05 职场文书
如何理解Vue简单状态管理之store模式
2021/05/15 Vue.js
elementui的el-popover修改样式不生效的解决
2021/06/30 Javascript