在vue中怎样封装组件复用

  • 更新时间:2020-03-22 21:40:28
  • 编辑:宿飞鸾
我们帮大家精选了vue相关的编程文章,网友牧天泽根据主题投稿了本篇教程内容,涉及到vue、组件复用、在vue中封装可复用的组件方法相关内容,已被361网友关注,如果对知识点想更进一步了解可以在下方电子资料中获取。
  • 前端工程师必备技能:Vue移动开发实战技巧 / 122 MB 推荐度:
  • 《Node.js+Express+Vue.js项目开发实战》源码 / 3.6 MB 推荐度:
  • Spring Boot+Spring Cloud+Vue+Element项目实战:手把手教你开发权限管理系统 / 132979 MB 推荐度:
  • Vue2实践揭秘 / 204.6 MB 推荐度:
  • Vue.js项目实战 / 141 MB 推荐度:
  • 在vue中封装可复用的组件方法

    本次封装的组件以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中封装可复用的组件方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持码农之家。

    vue相关教程

    • vue 路由嵌套高亮问题的解决方法

      这篇文章主要介绍了vue 路由嵌套高亮问题的解决方法,主路由通过v-for循环出来,次路由通过url拼接的方式导航到子路由页面,具体实现代码大家参考下本文

      发布时间:2019-07-25

    • 使用vue-router为每个路由配置各自的title

      这篇文章主要介绍了如何使用vue-router为每个路由配置各自的title,及使用vue router的方法,需要的朋友可以参考下

      发布时间:2019-07-23

    用户留言