首页 > 编程 > JavaScript > 正文

在vue中封装可复用的组件方法

2019-11-19 14:15:37
字体:
来源:转载
供稿:网友

本次封装的组件以toast组件为例

以前使用移动端ui插件时,通过一句代码比如 $.toast( ‘ 需要显示的内容 ' ),从而在页面上展示这段文字,并在一定时间后消失。

现在我们也尝试自己封装toast组件。

准备工作:vue-cli脚手架工程

先看一下涉及到的文件目录截图:

这次的封装主要涉及的文件是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中封装可复用的组件方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持武林网。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表