在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 window.location对象
Nov 14 Javascript
js实现可兼容IE、FF、Chrome、Opera及Safari的音乐播放器
Feb 11 Javascript
JS+CSS实现的日本门户网站经典选项卡导航效果
Sep 27 Javascript
Jquery全屏相册插件zoomvisualizer具有调节放大与缩小功能
Nov 02 Javascript
jQuery mobile的header和footer在点击屏幕的时候消失的解决办法
Jul 01 Javascript
JS控制FileUpload的上传文件类型实例代码
Oct 07 Javascript
原生js实现电商侧边导航效果
Jan 19 Javascript
详解javascript立即执行函数表达式IIFE
Feb 13 Javascript
js实现悬浮窗效果(支持拖动)
Mar 09 Javascript
vue-cli 打包使用history模式的后端配置实例
Sep 20 Javascript
qrcode生成二维码微信长按无法识别问题的解决
Apr 04 Javascript
解读Vue组件注册方式
May 15 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加密函数 Javascript/Js 解密函数
2013/09/23 PHP
Linux中用PHP判断程序运行状态的2个方法
2014/05/04 PHP
基于PHP实现数据分页显示功能
2016/05/26 PHP
PHP微信开发之查询微信精选文章
2016/06/23 PHP
Yii2.0 Basic代码中路由链接被转义的处理方法
2016/09/21 PHP
PHP面向对象程序设计之构造方法和析构方法详解
2019/06/13 PHP
javaScript 简单验证代码(用户名,密码,邮箱)
2009/09/28 Javascript
精通JavaScript 纠正 cleanWhitespace函数
2010/03/11 Javascript
五段实用的js高级技巧
2011/12/20 Javascript
网页中表单按回车就自动提交的问题的解决方案
2014/11/03 Javascript
javascript原型链继承用法实例分析
2015/01/28 Javascript
jQuery实现仿Google首页拖动效果的方法
2015/05/04 Javascript
JS实用的动画弹出层效果实例
2015/05/05 Javascript
简介JavaScript中Math.cos()余弦方法的使用
2015/06/15 Javascript
基于jquery实现复选框全选,反选,全不选等功能
2015/10/16 Javascript
jquery处理checkbox(复选框)是否被选中实例代码
2017/06/12 jQuery
vue.js提交按钮时进行简单的if判断表达式详解
2018/08/08 Javascript
layui实现图片虚拟路径上传,预览和删除的例子
2019/09/25 Javascript
js实现带搜索功能的下拉框
2020/01/11 Javascript
详解Python中的from..import绝对导入语句
2016/06/21 Python
python用模块zlib压缩与解压字符串和文件的方法
2016/12/16 Python
python实现扫描日志关键字的示例
2018/04/28 Python
numpy 对矩阵中Nan的处理:采用平均值的方法
2018/10/30 Python
对pycharm 修改程序运行所需内存详解
2018/12/03 Python
python科学计算之narray对象用法
2019/11/25 Python
python基于event实现线程间通信控制
2020/01/13 Python
解决Keras 与 Tensorflow 版本之间的兼容性问题
2020/02/07 Python
python实现密码验证合格程序的思路详解
2020/06/01 Python
基于python实现复制文件并重命名
2020/09/16 Python
博士研究生自我鉴定范文
2013/12/04 职场文书
中学实习教师自我鉴定
2013/12/12 职场文书
《囚绿记》教学反思
2014/03/01 职场文书
乡镇交通安全实施方案
2014/03/29 职场文书
贷款收入证明格式
2015/06/24 职场文书
导游词之无锡梅园
2019/11/28 职场文书
Python可变与不可变数据和深拷贝与浅拷贝
2022/04/06 Python