欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

基于Vue3+TypeScript的全局對象的注入和使用詳解

 更新時間:2022年09月28日 09:46:28   作者:伍華聰  
這篇文章主要介紹了基于Vue3+TypeScript的全局對象的注入和使用,本篇隨筆主要介紹一下基于Vue3+TypeScript的全局對象的注入和使用,需要的朋友可以參考下

剛完成一些前端項目的開發(fā),騰出精力來總結(jié)一些前端開發(fā)的技術(shù)點(diǎn),以及繼續(xù)完善基于SqlSugar的開發(fā)框架循序漸進(jìn)介紹的系列文章,本篇隨筆主要介紹一下基于Vue3+TypeScript的全局對象的注入和使用。我們知道在Vue2中全局注入一個全局變量使用protoType的方式,很方便的就注入了,而Vue3則不能通過這種方式直接使用,而是顯得復(fù)雜一些,不過全局變量的掛載有它的好處,因此我們在Vue3+TypeScript中也繼續(xù)應(yīng)用這種模式來處理一些常規(guī)的輔助類方法。

1、Vue2的全局掛載

Vue2的掛載由于它的便利性,常常會被大量的使用,只需要使用Vue.protoType.**的方式就可以注入一個變量到全局上,并在頁面或者組件中,通過this.**就可以訪問到,非常的方便,如下所示。

Vue.prototype.getToken = getToken
    Vue.prototype.guid = guid
    Vue.prototype.isEmpty = isEmpty

如果注入一些函數(shù)定義,也是類似的方式

// 提示成功信息
    Vue.prototype.msgSuccess = function(msg) {
      this.$message({ showClose: true, message: msg, type: 'success' })
    }
    // 提示警告信息
    Vue.prototype.msgWarning = function(msg) {
      this.$message({ showClose: true, message: msg, type: 'warning' })
    }
    // 提示錯誤信息
    Vue.prototype.msgError = function(msg) {
      this.$message({ showClose: true, message: msg, type: 'error' })
    }

有時候為了便利,會把一些常規(guī)的放在一個函數(shù)里面進(jìn)行注冊掛載處理。如下代碼所示。

這樣我們在main.js函數(shù)里,就可以直接導(dǎo)入并注冊掛載即可。

// 導(dǎo)入一些全局函數(shù)
import prototype from './prototype'
Vue.use(prototype)

有了一些常規(guī)函數(shù)的掛載處理,我們可以在組件或者頁面中,通過this引用就可以獲得了。

2、Vue3+TypeScript的全局掛載

而相對于Vue2,Vue3由于語法的變化,全局掛載則不能通過這種方式進(jìn)行處理了,甚至在頁面或者組件中,都不能訪問this指針引用了。

不過由于全局變量的掛載還是有它的好處,因此我們在Vue3+TypeScript中也繼續(xù)應(yīng)用這種模式來處理一些常規(guī)的輔助類方法。

網(wǎng)上的處理Vue3+TypeScirpt的掛載方式的介紹也比較多,如下是它的處理方式。創(chuàng)建一個獨(dú)立的ts文件useCurrentInstance.ts,如下代碼所示。

import { ComponentInternalInstance, getCurrentInstance } from 'vue'

//獲取默認(rèn)的全局自定義屬性
export default function useCurrentInstance() {
  const { appContext } = getCurrentInstance() as ComponentInternalInstance
  const proxy = appContext.config.globalProperties
  return {
    proxy
  }
}

然后在頁面代碼中import進(jìn)來實(shí)例化使用即可,如下代碼所示。

<script setup lang="ts">
import useCurrentInstance from '/@/utils/useCurrentInstance' //使用常規(guī)方式獲取對象
const { proxy } = useCurrentInstance();
let $u = proxy.$u as $u_interface;

//掛載的時候初始化數(shù)據(jù)
onMounted(async () => {
  console.log($u.success('abcdefa'));
  console.log($u.util.guid());
});

為了方便,我對上面的代碼進(jìn)行了加工處理,以便在使用的時候,盡可能的簡單化一些。

在原先獨(dú)立的ts文件useCurrentInstance.ts,文件上,設(shè)置代碼如下所示。

import { ComponentInternalInstance, getCurrentInstance } from 'vue'

//直接獲得注入的對應(yīng)的$u實(shí)例
export function $user() {
  const { appContext } = getCurrentInstance() as ComponentInternalInstance
  const proxy = appContext.config.globalProperties;
  const $u = proxy.$u as $u_interface;
  return $u;
}

這樣這個文件返回的$user函數(shù)就是一個我們掛載的用戶自定義對象了,我們把它統(tǒng)一調(diào)用即可。

import { $user } from '/@/utils/useCurrentInstance' //使用簡便模式獲取注入全局變量$u
let $u = $user();//實(shí)例化

兩行代碼就可以直接獲得一個當(dāng)前app的全局對象的引用了。

由于我們封裝了一些常規(guī)的方法和對象,我們在Vue3的setup代碼中直接使用全局對象的$u的代碼如下所示。

// 顯示編輯對話框
function showEdit(id) {
  if ($u.test.isEmpty(id)) {
    $u.warn("請選擇編輯的記錄!");
    return;
  }
  emit('showEdit', id)
}

至于全局對象中如何掛載自己的快捷對象,則是根據(jù)自己的實(shí)際需要了。

3、Vue3+TypeScript的全局掛載的對象接口定義

在前面我們大概介紹了全局對象的一些掛載和使用的過程,以及相關(guān)的實(shí)例代碼,不過我們可能一些剛使用Vue3+TypeScript的朋友可能不太清楚typescript中強(qiáng)類型的一些約束,它能給我們帶來很多語義提示的好處的。

我們知道,基于Typescrip的項目,在項目中都有一個typescript的配置文件tsconfig.json,其中對一些typescript的目錄或者設(shè)置進(jìn)行設(shè)定。由于在VSCode加載項目的時候,會把項目相關(guān)的類型定義加載進(jìn)來,它的配置在Include的配置項中。

其中一些項目全局通用的定義放在了types/*.d.ts 里面的,我們查看types目錄,可以看到很多全局的定義信息,如下所示。

我們在這里增加一個獨(dú)立的文件,來設(shè)置我們定義掛載對象的接口類型信息。

另外我們打算的全局輔助類對象的信息,放在util目錄里面,如下所示。

編寫相關(guān)的代碼,并提供一個install的組件安裝方法,給在main.ts中調(diào)用處理。

在mian.ts中,使用use的方式實(shí)現(xiàn)掛載處理即可。

 app.use($u);//掛載自定義的一些變量輔助類

而對應(yīng)的輔助類接口定義,統(tǒng)一放在全局的Types目錄的一個單獨(dú)的$u.d.ts文件中定義。

例如我們定義常規(guī)彈出消息的函數(shù)接口如下所示。

//定義自定義類$u的接口類型
interface message_interface {
  Message(message: string): any;
  success(message: string): any;
  warn(message: string): any;
  error(message: string): any;
  confirm(message = '您確認(rèn)刪除選定的記錄嗎?'): Promise<any>;
};

其他的一些接口定義,則進(jìn)行組合處理即可。

而我們最終的目的就是通過$u可以獲得相關(guān)$u_interface 的接口信息即可。

最后我們來看看用戶信息管理頁面的界面效果,頁面很多地方使用了基于Vue3+TypeScript的全局對象的注入處理。如一些信息提示,一些通用函數(shù)的調(diào)用等。

到此這篇關(guān)于基于Vue3+TypeScript的全局對象的注入和使用的文章就介紹到這了,更多相關(guān)Vue3 TypeScript全局對象內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Vue自定義指令實(shí)現(xiàn)checkbox全選功能的方法

    Vue自定義指令實(shí)現(xiàn)checkbox全選功能的方法

    下面小編就為大家分享一篇Vue自定義指令實(shí)現(xiàn)checkbox全選功能的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-02-02
  • vue 中滾動條始終定位在底部的方法

    vue 中滾動條始終定位在底部的方法

    今天小編就為大家分享一篇vue 中滾動條始終定位在底部的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09
  • Vue中provide、inject詳解以及使用教程

    Vue中provide、inject詳解以及使用教程

    provide和inject主要為高階插件/組件庫提供用例,并不推薦直接用于應(yīng)用程序代碼中,下面這篇文章主要給大家介紹了關(guān)于Vue中provide、inject詳解以及使用的相關(guān)資料,需要的朋友可以參考下
    2022-11-11
  • 簡單談?wù)刅ue中的diff算法

    簡單談?wù)刅ue中的diff算法

    diff算法的本質(zhì)是找出兩個對象之間的差異,目的是盡可能復(fù)用節(jié)點(diǎn)。,下面這篇文章主要給大家介紹了關(guān)于Vue中diff算法的相關(guān)資料,需要的朋友可以參考下
    2021-09-09
  • 實(shí)現(xiàn)一個簡單的vue無限加載指令方法

    實(shí)現(xiàn)一個簡單的vue無限加載指令方法

    vue 中的自定義指令是對底層 dom 進(jìn)行操作,下面以實(shí)現(xiàn)滾動到底部加載數(shù)據(jù),實(shí)現(xiàn)無限加載來介紹如何自定義一個簡單的指令。
    2017-01-01
  • Vue中使用import進(jìn)行路由懶加載的原理分析

    Vue中使用import進(jìn)行路由懶加載的原理分析

    這篇文章主要介紹了Vue中使用import進(jìn)行路由懶加載的原理分析。具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • vue實(shí)現(xiàn)動態(tài)路由的詳細(xì)代碼示例

    vue實(shí)現(xiàn)動態(tài)路由的詳細(xì)代碼示例

    動態(tài)路由,動態(tài)即不是寫死的,是可變的,下面這篇文章主要給大家介紹了關(guān)于vue實(shí)現(xiàn)動態(tài)路由的詳細(xì)代碼示例,文中通過圖文以及代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-01-01
  • Vue v-model組件封裝(類似彈窗組件)

    Vue v-model組件封裝(類似彈窗組件)

    這篇文章主要介紹了Vue中的 v-model組件封裝(類似彈窗組件),本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-01-01
  • vue3+ts使用APlayer的示例代碼

    vue3+ts使用APlayer的示例代碼

    這篇文章主要介紹了vue3+ts使用APlayer的示例代碼,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-08-08
  • 基于Vue實(shí)現(xiàn)拖拽效果

    基于Vue實(shí)現(xiàn)拖拽效果

    這篇文章主要介紹了基于Vue實(shí)現(xiàn)拖拽效果,文中給大家介紹了clientY pageY screenY layerY offsetY的區(qū)別講解,需要的朋友可以參考下
    2018-04-04

最新評論