在vue中封装可复用的组件方法
程序员文章站
2022-05-25 21:40:03
本次封装的组件以toast组件为例
以前使用移动端ui插件时,通过一句代码比如 $.toast( ‘ 需要显示的内容 ' ),从而在页面上展示这段文字,并在一定时间后消失...
本次封装的组件以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中封装可复用的组件方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。