在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 相关文章推荐
iphone safari不支持position fixed的解决方法
May 04 Javascript
浅析用prototype定义自己的方法
Nov 14 Javascript
JSONP跨域GET请求解决Ajax跨域访问问题
Dec 31 Javascript
jQuery使用deferreds串行多个ajax请求
Aug 22 Javascript
AngularJS  双向数据绑定详解简单实例
Oct 20 Javascript
Angular利用trackBy提升性能的方法
Jan 26 Javascript
微信小程序icon组件使用详解
Jan 31 Javascript
jQuery轮播图实例详解
Aug 15 jQuery
bootstrapTable+ajax加载数据 refresh更新数据
Aug 31 Javascript
JavaScript实现多层颜色选项卡嵌套
Sep 21 Javascript
微信小游戏中three.js离屏画布的示例代码
Oct 12 Javascript
JavaScript中时间格式化新思路toLocaleString()
Nov 07 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
PHP 存取 MySQL 数据库的一个例子
2006/10/09 PHP
set_include_path在win和linux下的区别
2008/01/10 PHP
php查看当前Session的ID实例
2015/03/16 PHP
通过Email发送PHP错误的方法
2015/07/20 PHP
php创建无限级树型菜单
2015/11/05 PHP
yii2的restful api路由实例详解
2019/05/14 PHP
下载网站打开页面后间隔多少时间才显示下载链接地址的代码
2010/04/25 Javascript
Google 静态地图API实现代码
2010/11/19 Javascript
jquery 提交值不为空的元素示例代码
2013/05/10 Javascript
一个判断抢购时间是否到达的简单的js函数
2014/06/23 Javascript
让angularjs支持浏览器自动填表
2014/11/10 Javascript
Node.js中的process.nextTick使用实例
2015/06/25 Javascript
JavaScript中style.left与offsetLeft的使用及区别详解
2016/06/08 Javascript
Vue.js实现一个自定义分页组件vue-paginaiton
2016/09/05 Javascript
JS中with的替代方法与String中的正则方法详解
2016/12/23 Javascript
简单谈谈require模块化jquery和angular的问题
2017/06/23 jQuery
基于Bootstrap的标签页组件及bootstrap-tab使用说明
2017/07/25 Javascript
详解微信小程序Page中data数据操作和函数调用
2017/09/27 Javascript
Vue filter介绍及其使用详解
2017/10/21 Javascript
微信小程序简单实现form表单获取输入数据功能示例
2017/11/30 Javascript
Vue2.0 v-for filter列表过滤功能的实现
2018/09/07 Javascript
node全局变量__dirname与__filename的区别
2019/01/14 Javascript
vue图片上传本地预览组件使用详解
2019/02/20 Javascript
[52:31]VP vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python实现的自定义多线程多进程类示例
2018/03/23 Python
python爬虫自动创建文件夹的功能
2018/08/01 Python
python实现的自动发送消息功能详解
2019/08/15 Python
python可视化text()函数使用详解
2020/02/11 Python
Python读取表格类型文件代码实例
2020/02/17 Python
Python3爬虫带上cookie的实例代码
2020/07/28 Python
python中numpy.empty()函数实例讲解
2021/02/05 Python
StubHub巴西:购买和出售您的门票
2016/07/22 全球购物
中软国际Java程序员机试题
2012/08/19 面试题
社区领导班子四风问题原因分析及整改措施
2014/09/28 职场文书
jquery插件实现搜索历史
2021/04/24 jQuery
十大必看国产动漫排名,魁拔上线,第二曾在日本播出
2022/03/18 国漫