在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 cookie插件代码类
May 26 Javascript
JS 分号引起的一段调试问题
Jun 18 Javascript
Dom与浏览器兼容性说明
Oct 25 Javascript
JS自定义功能函数实现动态添加网址参数修改网址参数值
Aug 02 Javascript
jquery选择器、属性设置用法经验总结
Sep 08 Javascript
jQuery源码分析之jQuery.fn.each与jQuery.each用法
Jan 23 Javascript
详解angular2实现ng2-router 路由和嵌套路由
Mar 24 Javascript
详解Vue 方法与事件处理器
Jun 20 Javascript
使用angular帮你实现拖拽的示例
Jul 05 Javascript
解决vue v-for 遍历循环时key值报错的问题
Sep 06 Javascript
对angular4子路由&amp;辅助路由详解
Oct 09 Javascript
node微信开发之获取access_token+自定义菜单
Mar 17 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
IStream与TStream之间的相互转换
2008/08/01 PHP
解析用PHP读写音频文件信息的详解(支持WMA和MP3)
2013/05/10 PHP
Codeigniter注册登录代码示例
2014/06/12 PHP
PHP图片库imagemagick安装方法
2014/09/23 PHP
PHP进程通信基础之信号
2017/02/19 PHP
Avengerls vs KG BO3 第二场2.18
2021/03/10 DOTA
js动态在form上插入enctype=multipart/form-data的问题
2012/05/24 Javascript
判断一个变量是数组Array类型的方法
2013/09/16 Javascript
jquery遍历table的tr获取td的值实现方法
2016/05/19 Javascript
模拟javascript中的sort排序(简单实例)
2016/08/17 Javascript
浅谈js常用内置方法和对象
2016/09/24 Javascript
URL的参数中有加号传值变为空格的问题(URL特殊字符)
2016/11/04 Javascript
浅谈原生JS实现jQuery的animate()动画示例
2017/03/08 Javascript
微信小程序 仿猫眼实现实例代码
2017/03/14 Javascript
node.js 发布订阅模式的实例
2017/09/10 Javascript
Taro集成Redux快速上手的方法示例
2018/06/21 Javascript
layui.use模块外部使用其内部定义的js封装函数方法
2019/09/16 Javascript
在layer弹层layer.prompt中,修改placeholder的实现方法
2019/09/27 Javascript
[38:23]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS LGD第一场
2014/05/24 DOTA
[37:37]DAC2018 4.4 淘汰赛 Optic vs Mineski 第二场
2018/04/05 DOTA
Python接收Gmail新邮件并发送到gtalk的方法
2015/03/10 Python
Python爬取网易云音乐热门评论
2017/03/31 Python
Python中生成器和迭代器的区别详解
2018/02/10 Python
tensorflow 1.0用CNN进行图像分类
2018/04/15 Python
python+selenium实现简历自动刷新的示例代码
2019/05/20 Python
python动态视频下载器的实现方法
2019/09/16 Python
CSS3的RGBA中关于整数和百分比值的转换
2015/08/04 HTML / CSS
世界上最大的艺术和工艺用品商店:MisterArt.com
2018/07/13 全球购物
新电JAVA笔试题目
2014/08/31 面试题
考博专家推荐信模板
2013/12/02 职场文书
工程类专业自荐信范文
2014/03/09 职场文书
优秀团员自我评价范文
2014/04/23 职场文书
召开会议通知范文
2015/04/15 职场文书
新手初学Java网络编程
2021/07/07 Java/Android
Python matplotlib多个子图绘制整合
2022/04/13 Python
PostgreSQL怎么创建分区表详解
2022/06/25 PostgreSQL