vue如何自定义封装API组件

 更新时间:2022年03月31日 10:20:05   作者:吃柠檬的猫  
这篇文章主要介绍了vue如何自定义封装API组件,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

自定义封装API组件

1.创建vue组件

<template>
    <div >
        <div class="alert">
        <div class="alert-main" v-for="item in notices" :key="item.name">
            <div class="alert-content">{{ item.content }}</div>
        </div>
    </div>
    </div >
</template>
<script>
   //多个提示框命名
    let seed = 0;
    function getUuid() {
        return 'alert_' + (seed++);
    }
    export default {
        data() {
            return {
                notices: []//多个提示框保存至数组
            }
        },
        methods:{
          add(notice) {
                const name = getUuid();//获取当前提示框名称
                //Object.assign 浅拷贝不会跳过那些值为 [null] 或 [undefined]的源对象
                // Object.assign(target, ...sources);target: 目标对象,sources:源对象
                let _notice = Object.assign({
                    name: name
                }, notice);
                //将当前提示框标签保存到notices
                this.notices.push(_notice);
                // 定时移除,单位:秒
                const time= notice.time|| 1.5;
                //1.5s后调用移除方法
                setTimeout(() => {
                    this.remove(name);
                }, time* 1000);
           },
          remove(name) {
                const notices = this.notices;
                for (let i = 0; i < notices.length; i++) {
                    if (notices[i].name === name) {
                        this.notices.splice(i, 1);
                        break;
                    }
                }
            }
         }
    }
</script>
<style lang="scss">
</style>

2.创建Alter.js生成组件

import Vue from 'vue'
import Alter from '/components/Alter/Alter.vue'
//Alter添加新属性,newInstance是个函数需求参数为properties
Alter.newInstance=properties=>{
    const props=properties || {};
    //创建一个Vue组件对象
    const Instance=new Vue({
        data:props,
        render(h){
            return h(Alter,{
                props:props
            })
        }
    });
    //等待接口调用的时候在实例化组件,避免进入页面就直接挂载到body上
    const component=Instance.$mount();
    //实例化一个组件,然后挂载到body上
    document.body.appendChild(component.$el);
    //通过闭包维护alter组件的引用
    const alter=Instance.$children[0];
    return{
        //Alter组件对外暴露的两个方法
        add(noticeProps){
            alter.add(noticeProps);
        },
        remove(name){
            alter.remove(name);
        }
    }
}
//提示单例
let messageInstance;
function getMessageInstance(){
    messageInstance=messageInstance || Alter.newInstance();
    return messageInstance;
}
//定义函数实现
function notice({time='',content=''}){
    let instance=getMessageInstance();
    instance.add({
        time:1.5,
        content:''
    })
}
//公布方法
export default{
    info(options){
        return notice(options);
    }
}

3.导入Vue

import alert from './alert.js'
// 挂载到Vue原型上
Vue.prototype.$Alert = alert
// 然后在组件中使用
this.$Alert.info({time: 1.5, content: '提示'})

如何封装使用api形式调用的vue组件

在实际开发中一般有两种封装vue组件的方法:一种就是常用的的通过props父组件传值给子组件的方法:

子组件

父组件

还有一种就是通过调用api的形式,下面例子是本人在实际项目中封装的一个自定义图标的弹窗组件

首先实现组件的UI页面(css部分截图不完整)

在vue文件的同目录下新建alertTips.js文件

页面中调用方法:

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。 

相关文章

  • 如何基于vue-cli3.0构建功能完善的移动端架子

    如何基于vue-cli3.0构建功能完善的移动端架子

    这篇文章主要介绍了基于vue-cli3.0构建功能完善的移动端架子,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • Element ui table表格内容超出隐藏显示省略号问题

    Element ui table表格内容超出隐藏显示省略号问题

    这篇文章主要介绍了Element ui table表格内容超出隐藏显示省略号问题,具有很好的参考价值,希望对大家有所帮助,
    2023-11-11
  • Vue中的ESLint配置方式

    Vue中的ESLint配置方式

    这篇文章主要介绍了Vue中的ESLint配置方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • Vue树表格分页的实现方法详解

    Vue树表格分页的实现方法详解

    这篇文章主要介绍了Vue树表格分页的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2022-10-10
  • vue中用qrcode库将超链接生成二维码图片的示例代码

    vue中用qrcode库将超链接生成二维码图片的示例代码

    生成二维码是一种常见的需求,无论是用于商业宣传还是个人分享,二维码都可以提供快速方便的方式来传递信息,在Vue框架中,我们可以使用qrcode库来轻松地生成二维码,本篇博文将介绍如何安装qrcode库,并通过一个实际例子来展示如何生成二维码,需要的朋友可以参考下
    2023-12-12
  • Vue实现数据筛选与搜索功能的示例代码

    Vue实现数据筛选与搜索功能的示例代码

    在许多Web应用程序中,数据筛选和搜索是关键的用户体验功能,本文将深入探讨在Vue中如何进行数据筛选与搜索的实现,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-10-10
  • vue3实战教程之axios的封装和环境变量

    vue3实战教程之axios的封装和环境变量

    这篇文章主要给大家介绍了关于vue3实战教程之axios的封装和环境变量的相关资料,文中通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2022-02-02
  • 详解vue-cli 构建项目 vue-cli请求后台接口 vue-cli使用axios、sass、swiper

    详解vue-cli 构建项目 vue-cli请求后台接口 vue-cli使用axios、sass、swiper

    本文通过实例代码给大家详细介绍了vue-cli 构建项目 vue-cli请求后台接口 vue-cli使用axios、sass、swiper的相关知识,需要的朋友可以参考下
    2018-05-05
  • 关于vue3编写挂载DOM的插件问题

    关于vue3编写挂载DOM的插件问题

    这篇文章主要介绍了vue3编写挂载DOM的插件的问题,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-07-07
  • 使用vuex的state状态对象的5种方式

    使用vuex的state状态对象的5种方式

    本文给大家介绍了使用vuex的state状态对象的5种方式,给大家贴出了我的vuex的结构,感兴趣的朋友跟随脚本之家小编一起学习吧
    2018-04-04

最新评论