首页 > 其他分享 >在vue中实现一个插件

在vue中实现一个插件

时间:2023-08-22 18:01:30浏览次数:38  
标签:插件 vue 实现 app key i18n translate options

1、使用情景

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

2、使用方法

mian.js注册插件

import { createApp } from 'vue'
const app = createApp({})
app.use(myPlugin, {
  /* 可选的选项 */
})

3、实现插件

举个例子,我们要实现一个翻译的插件:

3.1、模版文件

<h1>{{ $translate('greetings.hello') }}</h1>

3.2、i18n.js

export default {
  install: (app, options) => {
    // 注入一个全局可用的 $translate() 方法
    app.config.globalProperties.$translate = (key) => {
      // 获取 `options` 对象的深层属性
      // 使用 `key` 作为索引
      return key.split('.').reduce((o, i) => {
        if (o) return o[i]
      }, options)
    }
  }
}

我们的 $translate 函数会接收一个例如 greetings.hello 的字符串,在用户提供的翻译字典中查找,并返回翻译得到的值。
用于查找的翻译字典对象则应当在插件被安装时作为 app.use() 的额外参数被传入:

3.3、main.js

import i18nPlugin from './plugins/i18n'

app.use(i18nPlugin, {
  greetings: {
    hello: 'Bonjour!'
  }
})

这样,我们一开始的表达式 $translate('greetings.hello') 就会在运行时被替换为 Bonjour! 了。

4、插件中的 Provide / Inject​

在插件中,我们可以通过 provide 来为插件用户供给一些内容。举例来说,我们可以将插件接收到的 options 参数提供给整个应用,让任何组件都能使用这个翻译字典对象。

js

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

    app.provide('i18n', options)
  }
}

现在,插件用户就可以在他们的组件中以 i18n 为 key 注入并访问插件的选项对象了。

<script setup>
import { inject } from 'vue'
const i18n = inject('i18n')
console.log(i18n.greetings.hello)
</script>

官方文档

标签:插件,vue,实现,app,key,i18n,translate,options
From: https://www.cnblogs.com/never404/p/17649317.html

相关文章

  • 13.Linux中fork函数详解(附图解与代码实现)
    13.Linux中fork函数详解(附图解与代码实现)我们先来看个代码,判断一下这个代码的输出结果会是什么样的,先不要去看运行结果,判断好后再去看看是否和你的预期结果一致。#include<stdio.h>#include<unistd.h>#include<stdlib.h>#include<string.h>intmain(void){ pid_tpid; ......
  • Android 恢复出厂设置、跳过开机向导、wifi扫描界面筛选显示 的代码实现
    恢复出厂设置://APK侧Log.d(TAG,"exeRecovery");StringtimeStamp=DateFormat.format("yyyy-MM-ddTHH:mm:ssZ",System.currentTimeMillis()).toString();StringlocaleArg="--locale="+Locale.getDefault().toLa......
  • Centos使用nginx实现挂载本地yum源
    前言:生产环境中由于一些安全问题,无法使用外网,只能在内网运行,无法访问外部yum源,这时候对于一些环境的安装及其不方便,故使用内部挂载yum源方式解决。1、环境操作系统版本2、关闭selinux和防火墙#关闭selinuxsed-ri's/SELINUX=enforcing/SELINUX=disabled/'/etc/selinux/co......
  • 微信开发之一键修改群聊备注的技术实现
    修改群备注 修改群名备注后,如看到群备注未更改,是手机缓存问题,可以连续点击进入其他群,在点击进入修改的群,再返回即可看到修改后的群备注名,群名称的备注仅自己可见请求URL:http://域名地址/modifyGroupRemark请求方式:POST请求头Headers:Content-Type:application/json......
  • java实现大文件上传技术
    ​ 1,项目调研因为需要研究下断点上传的问题。找了很久终于找到一个比较好的项目。 在GoogleCode上面,代码弄下来超级不方便,还是配置hosts才好,把代码重新上传到了github上面。 https://github.com/freewebsys/java-large-file-uploader-demo 效果: 上传中,显示进度,时间......
  • 使用EasyPlayer.js,通过设置解码器参数实现H.265音频解码
    EasyPlayer是一款稳定且流畅的流媒体播放器,它能够支持H.264和H.265视频播放。该播放器能够处理各种视频流格式,包括RTSP、RTMP、HLS、FLV和WebRTC等。EasyPlayer具备多个版本,例如EasyPlayer-RTSP、EasyPlayer.js和EasyPlayerPro,以满足不同用户在不同场景下的需求。此外,EasyPlayer还......
  • FFmpeg将视频转换成一帧一帧的jpeg图片(代码实现)
      #include<iostream> usingnamespacestd; extern"C" { #include"libavcodec/avcodec.h" #include"libavformat/avformat.h" #include"libswscale/swscale.h" #include......
  • 变速器装配生产线如何实现远程监控和智能运维
    变速器又称变速箱,是用来改变发动机转速和转矩的装置,是汽车制造业的重要部件之一。随着自动化控制系统的发展,越来越多的变速器厂商实现自动化生产,包含零部件切削、装配、密封、注油、贴标等过程,从而替代人工实现高效率的生产,并降低成本支出。 变速器装配生产线包括压装机、拧紧机、......
  • 微信开发之一键发布群公告的技术实现
    简要描述:设置群公告请求URL:http://域名地址/setChatRoomAnnouncement请求方式:POST请求头Headers:Content-Type:application/jsonAuthorization:login接口返回参数:参数名必选类型说明wId是String登录实例标识chatRoomId是String群号content是String内容请求参数示例{"wId":"349be9......
  • Vue 3.0 KO Vue 2.0
    作为国内最火的前端框架,Vue这几年的热度只增不减。上手简单、中文文档全,大厂面试也常考。最近和一位在字节跳动做前端 leader的朋友沟通,了解到现在的求职者有很多对Vue还是一知半解,往深了问几句就容易暴露,从而面试败北。熟练掌握Vue ,除了是进入大厂的必备技能,更是成为高级工程......