在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 相关文章推荐
Ctrl+Enter提交内容信息
Jun 26 Javascript
基于Web标准的UI组件 — 树状菜单(2)
Sep 18 Javascript
妙用Jquery的val()方法
Jun 27 Javascript
jquery做的一个简单的屏幕锁定提示框
Mar 26 Javascript
JS阻止事件冒泡行为和闭包的方法
Jun 16 Javascript
基于JavaScript实现窗口拖动效果
Jan 18 Javascript
angular.js 路由及页面传参示例
Feb 24 Javascript
angular5 httpclient的示例实战
Mar 12 Javascript
JavaScript数据结构与算法之基本排序算法定义与效率比较【冒泡、选择、插入排序】
Feb 21 Javascript
js实现for循环跳过undefined值示例
Jul 02 Javascript
js实现盒子拖拽动画效果
Aug 09 Javascript
vue 把二维或多维数组转一维数组
Apr 24 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中计算中文字符串长度、截取中文字符串的函数代码
2011/08/09 PHP
PHP parse_ini_file函数的应用与扩展操作示例
2019/01/07 PHP
js 多浏览器分别判断代码
2010/04/01 Javascript
JS无限树状列表实现代码
2011/01/11 Javascript
防止文件缓存的js代码
2013/01/10 Javascript
Js Jquery创建一个弹出层可加载一个页面
2014/05/08 Javascript
鼠标事件的screenY,pageY,clientY,layerY,offsetY属性详解
2015/03/12 Javascript
深入理解jQuery中的事件冒泡
2016/05/24 Javascript
js将字符串中的每一个单词的首字母变为大写其余均为小写
2017/01/05 Javascript
微信小程序 swiper制作tab切换实现附源码
2017/01/21 Javascript
Vue.js bootstrap前端实现分页和排序
2017/03/10 Javascript
通过示例彻底搞懂js闭包
2017/08/10 Javascript
JavaScript实现带有子菜单和控件的slider轮播图效果
2017/11/01 Javascript
用Webpack构建Vue项目的实践
2017/11/07 Javascript
vue实现固定位置显示功能
2019/05/30 Javascript
javascript 数组精简技巧小结
2020/02/26 Javascript
Vue 打包体积优化方案小结
2020/05/20 Javascript
Python学习笔记之解析json的方法分析
2017/04/21 Python
Python入门必须知道的11个知识点
2018/03/21 Python
python2 与 python3 实现共存的方法
2018/07/12 Python
python format 格式化输出方法
2018/07/16 Python
对numpy中的where方法嵌套使用详解
2018/10/31 Python
Python拼接字符串的7种方法总结
2018/11/01 Python
python实现AES加密解密
2019/03/28 Python
django和vue实现数据交互的方法
2019/08/21 Python
在django中form的label和verbose name的区别说明
2020/05/20 Python
python如何导入依赖包
2020/07/13 Python
CSS的background属性及CSS3的背景图片设置总结
2016/06/13 HTML / CSS
使用html5实现表格实现标题合并的实例代码
2019/05/13 HTML / CSS
欧洲品牌瓷器餐具网上商店:Porzellantreff.de
2018/04/04 全球购物
BNKR中国官网:带你感受澳洲领先潮流时尚
2018/08/21 全球购物
医校毕业生自我鉴定
2014/01/25 职场文书
人力资源主管岗位职责
2014/01/29 职场文书
平面设计师岗位职责
2014/09/18 职场文书
Django程序的优化技巧
2021/04/29 Python
Windows下载并安装MySQL8.0.x 版本的完整教程
2022/04/10 MySQL