vue3之插件

news2024/10/23 13:17:52

插件plugins是一种能为vue添加全局功能的代码,官网连接:https://cn.vuejs.org/guide/reusability/plugins.html

项目的src文件夹下新建plugins文件夹

新建i18n.js文件
插件是一个拥有install方法的对象

export default {
    install: (app, options)=>{
        app.config.globalProperties.$translate = (key) =>{
            return key.split('.').reduce((o, i) =>{
                if(o) return o[i];
            }, options)
        }
    }
}

也可以是安装函数本身

 const install = (app, options) =>{
    app.config.globalProperties.$translate = (key) =>{
        return key.split('.').reduce((o, i) =>{
            if(o) return o[i];
        }, options)
    }
     // 根据传入的选项进行其他设置
     if (options && options.message) {
          console.log('来自选项的message', options.message)
     }

     // 可以根据选项添加更多的自定义行为
     if (options && options.enableFeatureX) {
            // 启用某个功能
       console.log('Feature X is enabled.');
     }
}
export default install

插件发挥作用的常见场景
通过 app.component() 和 app.directive() 注册一到多个全局组件或自定义指令
通过 app.provide() 使一个资源可被注入进整个应用
向 app.config.globalProperties 中添加一些全局实例属性或方法
一个可能上述三种都包含了的功能库 (例如 vue-router)。

使用插件

在main.js中引入插件文件,并通过use使用插件,注意:app.use()要在app.mount()之前,不然会报错,因为.use() 和 .mount() 方法的调用顺序有其特定的原因。简单来说,.use() 是用来安装插件的,而 .mount() 则是将 Vue 应用挂载到 DOM 上。为了确保所有通过插件添加的功能(如全局属性、指令等)在应用被挂载之前就已经准备好并可用,.use() 必须写在 .mount() 之前。

<script setup>
import './assets/main.css'

import { createApp } from 'vue'
import App from './App.vue'
import i18nPlugin from './plugins/i18n'
const app = createApp(App)
//可传入选项
app.use(i18nPlugin, {
  greetings: {
    hello: '你好呀!'
  }
})
app.mount('#app')

接着在需要使用插件的地方

<script setup>

</script>

<template>
  <div style="margin-bottom: 230px;padding-top: 30px;">
    <!-- 插件使用 -->
    <h1>{{ $translate('greetings.hello') }}</h1>
  </div>
</template>

在插件中使用Provide(提供) / Inject(注入)

当希望多个组件共享某些状态或配置时可以使用Provide / Inject,如果是复杂的状态管理可以用vuex
主题管理插件themePlugin.js

import {ref} from 'vue'
export default {
    install(app,options){
        const defaultTheme = options.defaultTheme || 'light'
        const theme = ref(defaultTheme)
        app.provide('theme', theme)

        app.config.globalProperties.$toggleTheme = ()=>{
            theme.value = theme.value === 'light' ? 'dark' : 'light'
        }
    }
}

main.js

import './assets/main.css'

import { createApp } from 'vue'
import App from './App.vue'
import i18nPlugin from './plugins/i18n'
import themePlugin from './plugins/themePlugin'
const app = createApp(App)
app.use(i18nPlugin, {
  greetings: {
    hello: '你好呀!'
  }
})
app.use(themePlugin,{
    defaultTheme: 'dark'
})
app.mount('#app')

使用主题插件

<script setup>
import { inject, getCurrentInstance } from "vue";
const theme = inject("theme");
// 获取当前组件实例
const { proxy } = getCurrentInstance();
//点击切换主题
function changeTheme() {
  if (proxy && proxy.$toggleTheme) {
    proxy.$toggleTheme();
  }
}
</script>

<template>
  <div
    style="margin-bottom: 230px;padding-top: 30px;"
    :class="theme"
  >
    <button @click="changeTheme">change theme</button>
    <!-- 插件使用 -->
    <h1>{{ $translate('greetings.hello') }}</h1>
  </div>
</template>
<style scoped>
.light {
 background: linear-gradient(315deg, #baf 25%, #647eff);
    border: none;
}
.dark {
  background: #000;
}
</style>

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2211294.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux中用java命令运行class文件提示“错误:找不到或无法加载主类”

1.问题&#xff1a; 很多时候&#xff0c;我们需要在Linux终端编译并运行普通Java程序&#xff0c;但是会遇到以下问题&#xff1a; 错误&#xff1a;找不到或无法加载主类” 2.问题原因及解决办法 其实原因很简单&#xff0c;可能由两方面造成。 原因一 java在运行.class文…

进制的介绍

一、进制介绍 对于整数&#xff0c;有四种表示方式&#xff1a;二进制&#xff1a;0,1 &#xff0c;满 2 进 1.以 0b 或 0B 开头。十进制&#xff1a;0-9 &#xff0c;满 10 进 1。八进制&#xff1a;0-7 &#xff0c;满 8 进 1. 以数字 0 开头表示。十六进制&#xff1a;0-9 …

损失函数篇 | YOLOv8更换损失函数之SlideLoss | 解决简单样本和困难样本之间的不平衡问题

前言:Hello大家好,我是小哥谈。SlideLoss是一种新颖的损失函数,可以有效地解决YOLO算法在处理小目标和密集目标时的问题。本文所做出的改进是在YOLOv8算法中引入SlideLoss损失函数。🌈 目录 🚀1.基础概念 🚀2.更换方法 🍀🍀步骤1:loss.py文件修改 🍀�…

C#源码安装ZedGraph曲线显示组件

在软件开发里,数据的显示,已经是软件开发的大头。 如果让数据更加漂亮地、智能地显示,就是软件的核心价值了。 因为不管数据千万条,关键在于用户看到图。因为一个图表,就可以表示整个数据的趋势, 或者整个数据的走向,数据频度和密码。所以图表显示是软件的核心功能,比如…

25.1 降低采集资源消耗的收益和无用监控指标的判定依据

本节重点介绍 : 降低采集资源消耗的收益哪些是无用指标&#xff0c;什么判定依据 通过 grafana的 mysql 表获取所有的 查询表达式expr通过 获取所有的prometheus rule文件获取所有的 告警表达式expr通过 获取所有的prometheus 采集器接口 获取所有的采集metrics计算可得到现在…

SpringBoot——静态资源访问的四种方式

1.默认的静态资源目录 /static /public /resources /META-INF/resources 动态资源目录&#xff1a;/templates 2.resources静态资源目录图片存放 3. 静态资源访问 3.1.通过路径访问静态资源 http://localhost:8080/a.jpg http://localhost:8080/b.jpg …

《深度学习》OpenCV 物体跟踪 原理及案例解析

目录 一、物体跟踪 1、什么是物体跟踪 2、步骤 1&#xff09;选择跟踪算法 2&#xff09;初始化跟踪器 3&#xff09;在每个视频帧上执行跟踪 4&#xff09;可选的重新初始化 3、原理 二、案例实现 1、完整代码 1&#xff09;使用方式 2&#xff09;运行结果 2、关…

用python做一个简单的画板

一&#xff0c;画板的介绍 画板&#xff08;Paint Board&#xff09;是一个提供用户绘图、涂鸦和创作的平台。现代数字画板通常是由软件程序实现的&#xff0c;具有多种功能。以下是画板的一些主要特征和功能&#xff1a; 1. 基本绘图工具 画笔和铅笔&#xff1a;用户可以选…

Java——数组的定义与使用

各位看官&#xff1a;如果您觉得这篇文章对您有帮助的话 欢迎您分享给更多人哦 感谢大家的点赞收藏评论&#xff0c;感谢您的支持&#xff01;&#xff01;&#xff01; 一&#xff1a;数组的概念以及定义,初始化 1.1&#xff1a;数组概念以及定义 数组概念&#xff1a;可以看成…

红黑树:c++实现

1. 红⿊树的概念 红⿊树是⼀棵⼆叉搜索树&#xff0c;他的每个结点增加⼀个存储位来表⽰结点的颜⾊&#xff0c;可以是红⾊或者⿊⾊。 通过对任何⼀条从根到叶⼦的路径上各个结点的颜⾊进⾏约束&#xff0c;红⿊树确保没有⼀条路径会⽐其他路 径⻓出2倍&#xff0c;因⽽是接近平…

用LaTeX写一篇帅帅的算法学习题解

前言 先来看看用 LaTeX \text{LaTeX} LaTeX 写出来的题解是啥样&#xff0c;内容是瞎写的。 前提知识与环境 默认已经掌握了 LaTeX \text{LaTeX} LaTeX 的一些用法&#xff0c;特别是公式如何写&#xff0c;如果你对这块还是很了解&#xff0c;可以先学着使用 Typora \…

DEEP TEMPORAL GRAPH CLUSTERING.md

ICLR23 推荐指数&#xff1a; #paper/⭐ 原因的话&#xff0c;可以找找前人的一篇文章(可以看&#xff0c;但是当你阅读前人文章会发现。) 动机/优点 很明确&#xff0c;时序图只需要考虑时间相近的点&#xff0c;因此开销特别小。但是邻接矩阵&#xff0c;就要考虑所有点的关…

Dockerfile最佳实践:如何创建高效的容器

在微服务和云计算时代&#xff0c;Docker就已经成为应用开发和部署不可或缺的工具。如今虽处大模型时代&#xff0c;但这些基础技术仍然是我们需要掌握的。 容器化允许开发者将应用程序及其依赖打包到一个单一的、可移植的单元中&#xff0c;确保了可预测性、可扩展性和快速部…

反射机制(Reflection)

1. 反射 Java的反射机制(reflection)是在运行状态中&#xff0c;对于任意一个类&#xff0c;都能够知道这个类的所有属性和方法&#xff1b;对于任意一个对象&#xff0c;都能够调用它的任意方法和属性&#xff1b;这种动态获取信息以及动态调用对象方法的功能称为java语言的反…

创建一个c#程序,实现字符串类型转整数类型

首先&#xff0c;创建一个c#程序 在代码编辑器中编写代码&#xff0c;点击Run按钮或者按下F5键来运行程序。 下面&#xff0c;编写将字符串类型转换为整数类型的代码。 sing System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Task…

安装samples/1_Utilities/deviceQuery等文件

本文章摘抄来自https://zhuanlan.zhihu.com/p/666647168 从cuda11.6开始cuda toolkit就不自带cuda-samples了&#xff0c;而deviceQuery又是cuda-sample的一个子库&#xff0c;所以需要自己手动装一下。 我的系统是ubuntu20.04&#xff0c;已经安装了CUDA Toolkit 12.2。 第…

【深度学习】使用FasterRCNN模型训练自己的数据集(记录全流程

此处用的FasterRCNN模型使用的是B导的源码&#xff0c;读者可以去B站搜B导的视频进行了解和学习&#xff0c;视频中B导非常细心讲解了如何训练自己的数据集以及预测。 文章目录 前言一、准备数据集二、环境配置2.1 基础环境2.2 其他依赖包安装2.3 预训练权重下载 二、训练数据集…

程序员成长秘籍:是迈向管理巅峰,还是深耕技术架构?

专业在线打字练习平台-巧手打字通&#xff0c;只输出有价值的知识。 一 管理和架构 做技术的同学一般有两条职业发展路径&#xff0c;横向的管理路线和纵向的技术路线。管理路线对应的是管理岗&#xff0c;讲究的是排兵布阵&#xff0c;通过各种资源的优化配置发挥价值。技术路…

(Linux驱动学习 - 10).MISC驱动实验

一.MISC介绍 1.MISC定义 misc 的意思是混合、杂项的&#xff0c;因此 MISC 驱动也叫做杂项驱动&#xff0c;也就是当我们板子上的某 些外设无法进行分类的时候就可以使用 MISC 驱动。 MISC 驱动其实就是最简单的字符设备驱 动&#xff0c;通常嵌套在 platform 总线驱动中&…

智能贴身监测,健康生活建议,圆道妙医智能手表体验

如今热衷于运动和健康生活的爱好者越来越多&#xff0c;相关的赛事等活动也是逐年增多&#xff0c;很多朋友为了能够直观的了解自己的健康状况&#xff0c;都会配备一款智能手表&#xff0c;这样戴在身上就可以随时了解自己的心率、血氧等数据。最近我尝试了一款圆道妙医推出的…