vue自定义全局组件(自定义插件)

2023-11-11

    有时候我们在做开发的时候,就想自己写一个插件然后就可以使用自己的插件,那种成就感很强。博主最近研究element-ui和axios的时候,发现他们是自定义组件,但是唯一有一点不同的是,在用element-ui的时候是使用Vue.use()语句来使用的,而axios的时候,不用Vue.use(),只要import就可以导入进来了,感觉很神奇,细细的发现,原来他们的不同是因为axios里面并没有写install方法,而element-ui就有写这个方法,下面就利用这个install来写一个自己的插件。

    首先写这个插件之前生成好一个目录来存放这个插件。博主我是将他放在一个component的loading目录下:


    在该目录下,按博主习惯是写一个index.js文件还有一个组件loading.vue,index.js里面写的是关于loading.vue的install方法。代码如下所示:

import LoadingComponent from './Loading.vue'

const Loading={
    install:function (Vue) {
        Vue.component('Loading',LoadingComponent)
    }
}
export default Loading
    其中install方法表示在main.js中,如果使用Vue.use()方法的话,则该方法默认会调用install方法。在install方法里面还注册了组件,这里面'Loading'指的是外面App.vue使用的组件名,LoadingComponent指的是上面引过来的Loading.vue。之后通过export default Loading导出。

    然后Loading.vue代码如下所示:

<template>
    <div class="loading-box">
        Loading...
    </div>
</template>
<script></script>

    Loading.vue代码写完后然后就在默认的main.js文件中导入,通过使用Vue.use()方法导入刚刚写好的index.js:

import Vue from 'vue'
import App from './App.vue'
import Loading from './components/loading'

Vue.use(Loading)

new Vue({
  el: '#app',
  render: h => h(App)
})

    然后就在App.vue方法里面使用该模板就可以了:

<template>
  <div id="app">
    <Loading></Loading>
  </div>
</template>

    你也可以在刚刚的loading.vue文件里面写自己的一些代码,比如写一个日历插件,按钮插件等等。如下面这个:

<template>
    <div class="loader">
        <div class="loader-inner ball-spin-fade-loader">
            <div></div>
            <div></div>
            <div></div>
            <div></div>
            <div></div>
            <div></div>
            <div></div>
            <div></div>
        </div>
    </div>
</template>
<style scoped>
    .loader{
        width:80px;
        height: 80px;
        margin:50px auto;
    }
    @keyframes ball-spin-fade-loader {
        50% {
            opacity: 0.3;
            -webkit-transform: scale(0.4);
            transform: scale(0.4); }

        100% {
            opacity: 1;
            -webkit-transform: scale(1);
            transform: scale(1); } }

    .ball-spin-fade-loader {
        position: relative; }
    .ball-spin-fade-loader > div:nth-child(1) {
        top: 25px;
        left: 0;
        -webkit-animation: ball-spin-fade-loader 1s 0s infinite linear;
        animation: ball-spin-fade-loader 1s 0s infinite linear; }
    .ball-spin-fade-loader > div:nth-child(2) {
        top: 17.04545px;
        left: 17.04545px;
        -webkit-animation: ball-spin-fade-loader 1s 0.12s infinite linear;
        animation: ball-spin-fade-loader 1s 0.12s infinite linear; }
    .ball-spin-fade-loader > div:nth-child(3) {
        top: 0;
        left: 25px;
        -webkit-animation: ball-spin-fade-loader 1s 0.24s infinite linear;
        animation: ball-spin-fade-loader 1s 0.24s infinite linear; }
    .ball-spin-fade-loader > div:nth-child(4) {
        top: -17.04545px;
        left: 17.04545px;
        -webkit-animation: ball-spin-fade-loader 1s 0.36s infinite linear;
        animation: ball-spin-fade-loader 1s 0.36s infinite linear; }
    .ball-spin-fade-loader > div:nth-child(5) {
        top: -25px;
        left: 0;
        -webkit-animation: ball-spin-fade-loader 1s 0.48s infinite linear;
        animation: ball-spin-fade-loader 1s 0.48s infinite linear; }
    .ball-spin-fade-loader > div:nth-child(6) {
        top: -17.04545px;
        left: -17.04545px;
        -webkit-animation: ball-spin-fade-loader 1s 0.6s infinite linear;
        animation: ball-spin-fade-loader 1s 0.6s infinite linear; }
    .ball-spin-fade-loader > div:nth-child(7) {
        top: 0;
        left: -25px;
        -webkit-animation: ball-spin-fade-loader 1s 0.72s infinite linear;
        animation: ball-spin-fade-loader 1s 0.72s infinite linear; }
    .ball-spin-fade-loader > div:nth-child(8) {
        top: 17.04545px;
        left: -17.04545px;
        -webkit-animation: ball-spin-fade-loader 1s 0.84s infinite linear;
        animation: ball-spin-fade-loader 1s 0.84s infinite linear; }
    .ball-spin-fade-loader > div {
        background-color: #399;
        width: 15px;
        height: 15px;
        border-radius: 100%;
        margin: 2px;
        -webkit-animation-fill-mode: both;
        animation-fill-mode: both;
        position: absolute; }
</style>
    效果是一个滚动的圆:



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vue自定义全局组件(自定义插件) 的相关文章

随机推荐

  • 企业级zabbix监控服务搭建

    一 什么是zabbix zabbix可以干什么的 为什么我们要使用zabbix 什么是zabbix zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案 zabbix由2部分构成 zabbix serv
  • Swoole系列(3) - 服务端 (异步风格)

    1 应用场景 主要用于学习和使用Swoole的服务端 异步风格 同时学习其实现原理 2 学习 操作 1 文档阅读 Swoole4 文档 服务端 异步风格 2 整理输出 2 1 是什么 方便的创建一个异步服务器程序 支持 TCP UDP un
  • 行内/行内块元素、块元素,水平垂直居中的方法

    行内元素 行内块元素 水平居中 text align ceter 垂直居中 line height height 块元素 水平居中 margin 0 auto 水平垂直居中 父子皆定位 方法一 盒子必须要有宽高 top 0 right 0
  • 浅谈磁珠(基础)

    磁珠 Ferrite bead 全称为铁氧体磁珠滤波器 简写FB 抗干扰元件的一种 滤除高频噪声效果显著 磁珠的等效电路是一个DCR电阻串联一个电感并联一个电容和一个电阻 DCR是一个恒定值 但后面三个元件都是频率的函数 也就是说它们的感抗
  • ajax中for循环中怎么使用if,在ExtJS中,我可以在Ajax请求中调用for循环和if语句来定义我的参数吗?...

    我想通过我在fieldSet中的复选框进行迭代 如果复选框被选中 我想将复选框的ID添加到数组中 该数组将作为我的Ajax请求的参数之一 在ExtJS中 我可以在Ajax请求中调用for循环和if语句来定义我的参数吗 我意识到我可以创建一个
  • linux下载安装搭建、卸载FastDfs文件服务器、配置多存储路径(轮询、最大内存选择)、nginx反向代理实现图片预览、常用命令

    linux下载安装搭建 卸载FastDfs文件服务器 配置多存储路径 轮询 最大内存选择 nginx反向代理实现图片预览 常用命令 Springboot整合Fastdfs上传图片 缩略图 下载文件 需求 文件转存方案 springboot整
  • 51:电机(ULN2003D)

    目录 1 介绍 2 原理图 编辑 A 大功率直接驱动 B H桥驱动 3 电机调速 pwm 编辑 A 实例代码 大功率直接驱动 1 介绍 我们51单片机使用的是直流电机 直流电机是一种将电能转换为机械能的装置 一般的直流电机有两个电极 当电极
  • 利用CGAL对网格填洞( Filling holes)

    CGAL的资料尤其是中文资料少之又少 现根据自己要完成的工作进行一个记录和总结 也希望能填补资料的空缺 在CGAL中 使用半边结构Halfedge Data Structure来存储网格信息 另外一个类似于CGAL的库OpenMesh同样使
  • Istio熔断器功能解析

    前言 Istio因灵活的可观察性和安全的服务间通信受到了赞许 然而 其他更重要的功能才真正使得Istio成为了服务网格里的瑞士军刀 当遇到运行时长 延迟和错误率等SLO问题时 服务间的流量管理能力是至关重要的 在今年早些时候发布 Istio
  • java两个日期比较相等

    1 利用Date的equals比较大小 1 利用Date的equals比较大小 SimpleDateFormat sdf new SimpleDateFormat yyyy MM dd HH mm ss String timeStr1 20
  • stm32 串口发送字符串第一个字节丢失、复位发送00

    1 stm32 串口发送字符串第一个字节丢失 这个问题如下解决 while USART GetFlagStatus USART1 USART FLAG TXE RESET 防止一个字节丢失 USART SendData USART1 dat
  • 魏副业而战:闲鱼无货源爆款热销产品推荐

    我是魏哥 与其在家躺平 不如魏副业而战 每天分享一个闲鱼技巧 今天给大家推荐一些闲鱼爆款 很多人做闲鱼过了新鲜期之后 觉得选品太难了 很羡慕那些月入过万每天爆单的人 那为什么别人能每天轻松卖出几十单 而自己却不知道上架什么产品呢 下面就告诉
  • 检查nacos是否正常启动

    可以通过以下几种方式检查nacos是否启动 查看nacos日志文件 启动nacos时 控制台会输出一些信息 可以查看控制台输出的信息 如果显示 Server startup in XXX ms 等字样 则说明nacos已经启动 查看端口是否
  • mybatis-plus 判断参数是否为空并作为查询条件

    方式一 在配置文件中加上全局配置 mybatis plus global config db config field strategy not empty 方式二 对某一字段单独进行判断非空 QueryWrapper
  • Stable Disffusion 采样器总结

    Stable Disffusion 采样器 1 Euler a Euler a 属于超快采样模式 采样10次 即可完成基本画面 但是继续提高采样步数 就基本脱离了提示词 是个插画 tag利用率仅次与DPM2和DPM2 a 环境光效菜 构图有
  • springcloud配置详解

    在这里插入代码片 1 版本信息 父项目 依赖管理 pom文件
  • git创建/合并分支原理

    来源 https blog csdn net abcnull article details 90288499 创建与合并分支简单原理 分支被合并可以被 d 删除 分支没有被合并 d 删除会出错 需要 D 强制删除 master分支 一个分
  • Mysql教程(一):Mysql数据模型和SQL语法分析

    Mysql教程 一 Mysql数据模型和SQL语法分析 1 Mysql数据模型 1 1 关系型数据库 RDBMS 概念 建立在关系模型基础上 由多张相互连接的二维表组成的数据库 特点 使用表存储数据 格式统一 便于维护 使用SQL语言操作
  • 宝塔使用composer安装laravel 时报错 The Process class relies on proc_open, which is not available on your PHP

    Symfony Component Process Exception RuntimeException The Process class relies on proc open which is not available on you
  • vue自定义全局组件(自定义插件)

    有时候我们在做开发的时候 就想自己写一个插件然后就可以使用自己的插件 那种成就感很强 博主最近研究element ui和axios的时候 发现他们是自定义组件 但是唯一有一点不同的是 在用element ui的时候是使用Vue use 语句