在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 相关文章推荐
基于jquery的跟随屏幕滚动代码
Jul 24 Javascript
sliderToggle在写jquery的计时器setTimeouter中不生效
May 26 Javascript
判断iframe里的页面是否加载完成
Jun 06 Javascript
jQuery中prependTo()方法用法实例
Jan 08 Javascript
JavaScript的instanceof运算符学习教程
Jun 08 Javascript
Angular2从搭建环境到开发步骤详解
Oct 17 Javascript
Html中 IFrame的用法及注意点
Dec 22 Javascript
JavaScript常用正则函数用法示例
Jan 23 Javascript
封装运动框架实战左右与上下滑动的焦点轮播图(实例)
Oct 17 Javascript
jquery.picsign图片标注组件实例详解
Feb 02 jQuery
微信小程序textarea层级过高的解决方法
Mar 04 Javascript
vue登录页实现使用cookie记住7天密码功能的方法
Feb 18 Vue.js
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
常用的php ADODB使用方法集锦
2008/03/25 PHP
php中取得文件的后缀名?
2012/02/20 PHP
JQuery的Alert消息框插件使用介绍
2010/10/09 Javascript
jQuery源码分析-03构造jQuery对象-源码结构和核心函数
2011/11/14 Javascript
js 金额文本框实现代码
2012/02/14 Javascript
Extjs显示从数据库取出时间转换JSON后的出现问题
2012/11/20 Javascript
js sort 二维数组排序的用法小结
2014/01/24 Javascript
jQuery拖拽div实现思路
2014/02/19 Javascript
js判断url是否有效的两种方法
2014/03/04 Javascript
javascript替换已有元素replaceChild()使用介绍
2014/04/03 Javascript
手机号码,密码正则验证
2014/09/04 Javascript
浅谈jQuery中 wrap() wrapAll() 与 wrapInner()的差异
2014/11/12 Javascript
Javascript实现飞动广告效果的方法
2015/05/25 Javascript
js遮罩效果制作弹出注册界面效果
2017/01/25 Javascript
微信小程序bindinput与bindsubmit的区别实例分析
2019/04/17 Javascript
element-ui中按需引入的实现
2019/12/25 Javascript
使用vue实现一个电子签名组件的示例代码
2020/01/06 Javascript
在vue-cli3中使用axios获取本地json操作
2020/07/30 Javascript
[35:26]DOTA2上海特级锦标赛B组小组赛#2 VG VS Fnatic第三局
2016/02/26 DOTA
Python中Scrapy爬虫图片处理详解
2017/11/29 Python
pycharm 主题theme设置调整仿sublime的方法
2018/05/23 Python
详解python3安装pillow后报错没有pillow模块以及没有PIL模块问题解决
2019/04/17 Python
Django框架模板的使用方法示例
2019/05/25 Python
python利用itertools生成密码字典并多线程撞库破解rar密码
2019/08/12 Python
基于python实现FTP文件上传与下载操作(ftp&amp;sftp协议)
2020/04/01 Python
css3.0 图形构成实例练习一
2013/03/19 HTML / CSS
经典C++面试题一
2016/11/06 面试题
高校自主招生自荐信
2013/12/09 职场文书
施工资料员岗位职责
2014/01/06 职场文书
2014年小学植树节活动方案
2014/03/02 职场文书
中学生国旗下讲话稿
2014/04/26 职场文书
劳模先进事迹材料
2014/12/24 职场文书
最新的离婚协议书范本!
2019/07/02 职场文书
导游词之临安白水涧
2019/11/05 职场文书
mysql外连接与内连接查询的不同之处
2021/06/03 MySQL
MySQL 全文检索的使用示例
2021/06/07 MySQL