在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 常用函数
Dec 30 Javascript
Jquery知识点一 Jquery的ready和Dom的onload的区别
Jan 15 Javascript
不用构造函数(Constructor)new关键字也能实现JavaScript的面向对象
Jan 11 Javascript
jquery教程限制文本框只能输入数字和小数点示例分享
Jan 13 Javascript
利用js正则表达式验证手机号,email地址,邮政编码
Jan 23 Javascript
jQuery实现冻结表格行和列
Apr 29 Javascript
Javascript typeof与instanceof的区别
Oct 18 Javascript
vue-cli的webpack模板项目配置文件分析
Apr 01 Javascript
js使用原型对象(prototype)需要注意的地方
Aug 28 Javascript
react-native fetch的具体使用方法
Nov 01 Javascript
JavaScript数组、json对象、eval()函数用法实例分析
Feb 21 Javascript
vue组件 keep-alive 和 transition 使用详解
Oct 11 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
ASP知识讲座四
2006/10/09 PHP
yii2.0实现验证用户名与邮箱功能
2015/12/22 PHP
PHP数组操作简单案例分析
2016/10/15 PHP
jquery操作checkbox实现全选和取消全选
2014/05/02 Javascript
判断iframe里的页面是否加载完成
2014/06/06 Javascript
使用focus方法让光标默认停留在INPUT框
2014/07/29 Javascript
express的中间件cookieParser详解
2014/12/04 Javascript
jquery实现的代替传统checkbox样式插件
2015/06/19 Javascript
Ext JS框架程序中阻止键盘触发回退或者刷新页面的代码分享
2016/06/07 Javascript
JS基于正则截取替换特定字符之间字符串操作示例
2017/02/03 Javascript
JS实现动态给标签控件添加事件的方法示例
2017/05/13 Javascript
深入探究node之Transform
2017/07/20 Javascript
vue中遇到的坑之变化检测问题(数组相关)
2017/10/13 Javascript
详解js正则表达式验证时间格式xxxx-xx-xx形式
2018/02/09 Javascript
vuejs2.0运用原生js实现简单拖拽元素功能
2020/08/21 Javascript
详解小程序input框失焦事件在提交事件前的处理
2019/05/05 Javascript
微信小程序wepy框架学习和使用心得详解
2019/05/24 Javascript
Vue 动态路由的实现及 Springsecurity 按钮级别的权限控制
2019/09/05 Javascript
JavaScript实现抖音罗盘时钟
2019/10/11 Javascript
Python中使用 Selenium 实现网页截图实例
2014/07/18 Python
PyTorch线性回归和逻辑回归实战示例
2018/05/22 Python
python自动结束mysql慢查询会话的实例代码
2019/10/27 Python
德国古洛迷亚百货官网:GALERIA Kaufhof
2017/06/20 全球购物
New Balance加拿大官方网站:运动鞋和健身服装
2018/11/19 全球购物
武汉东之林科技有限公司机试
2013/09/17 面试题
Linux面试题LINUX系统类
2014/11/19 面试题
销售行业个人求职自荐信
2013/09/25 职场文书
大客户销售经理职责
2013/12/04 职场文书
关于毕业的广播稿
2014/01/10 职场文书
室内设计专业毕业生求职信
2014/05/02 职场文书
基层党支部公开承诺书
2014/05/29 职场文书
园艺专业毕业生求职信
2014/09/02 职场文书
大学生村官个人对照检查材料(群众路线)
2014/09/26 职场文书
2015世界地球日活动总结
2015/02/09 职场文书
《角的度量》教学反思
2016/02/18 职场文书
Golang map映射的用法
2022/04/22 Golang