Dieses Axios-Paket wird in der Vue3-Demo verwendet. Der Einfachheit halber wird Element-Plus bei Bedarf in die Vue3-Konfiguration geladen. Kapselung von Axios http.ts importiere axios, { AxiosRequestConfig, AxiosRequestHeaders, AxiosResponse } von 'axios' importiere { IResponseData } aus '@/types' importiere { ElMessage, ElLoading, ILoadingInstance } von 'element-plus' Typ TAxiosOption = { Basis-URL: Zeichenfolge; Zeitüberschreitung: Zahl; } const konfiguration = { Basis-URL: '/', Zeitüberschreitung: 120000 } lass laden: ILoadingInstance; Klasse Http { //Dienst: AxiosInstance; Service; Konstruktor(Konfiguration: TAxiosOption) { dieser.Dienst = axios.create(Konfiguration) /* Anforderungsabfangen this.service.interceptors.request.use(config => config, error => Promise.reject(error))*/ this.service.interceptors.request.use((Konfiguration: AxiosRequestConfig) => { /* Geschäftslogik 1. Ladeanimation im Vollbildmodus aktivieren 2. Datenverschlüsselung config.data 3. Fügen Sie dem Anforderungsheader ein Token hinzu, kombiniert mit vuex oder localstorage: wenn (store.getters.token) config.headers['x-token'] = store.getters.token sonst Weiterleitung 4. … */ wird geladen = ElLoading.service({ Sperre: wahr, Text: 'Wird geladen', Spinner: „el-icon-loading“, Hintergrund: 'rgba(255, 255, 255, 0.7)', }) wenn (localStorage.getItem('token')) { (config.headers als AxiosRequestHeaders).authorization = localStorage.getItem('token') als Zeichenfolge } Konfiguration zurückgeben }, Fehler => { /* Anforderungsfehler 1. Vollbild-Ladeanimation schließen 2. Zur Fehlerseite weiterleiten */ wird geladen.schließen() return Promise.reject(error) // Um die Fehlermeldung im Code abzufangen}) /* Antwortabfangen this.service.interceptors.response.use(response => response.data, error => Promise.reject(error))*/ this.service.interceptors.response.use((Antwort: AxiosResponse<beliebig>) => { /* 1. Schließen Sie die Ladeanimation im Vollbildmodus. 2. Entschlüsseln Sie die Daten. 3. Führen Sie unterschiedliche Fehlerbehandlungen basierend auf response.data.code durch. 4. … */ wird geladen.schließen() const data = antwort.data const { code } = Daten wenn (Code !== '000000') { ElMessage.error(Daten.Nachricht) returniere Promise.reject(Daten) } Antwortdaten zurückgeben }, Fehler => { wird geladen.schließen() ElMessage.error('Anforderung fehlgeschlagen',) returniere Promise.reject(Fehler) }) } get<T>(url: string, params?: object, _object = {}): Promise<IResponseData<T>> { gibt this.service.get(url, { params, ..._object }) zurück } post<T>(url: string, params?: object, _object = {}): Promise<IResponseData<T>> { gib diesen.Dienst.Post zurück (URL, Parameter, _Objekt) } setze<T>(url: string, params?: object, _object = {}): Promise<IResponseData<T>> { gib this.service.put(URL, Parameter, _Objekt) zurück } löschen<T>(URL: Zeichenfolge, Parameter?: beliebig, _Objekt = {}): Promise<IResponseData<T>> { gib dies zurück.Dienst.Löschen(URL, {Parameter, ..._Objekt}) } } exportiere standardmäßig neues Http(config) types/index.ts: Typdefinition der von der Schnittstelle zurückgegebenen Daten Schnittstelle IResponseData<T> exportieren { Status: Nummer; Nachricht?:Zeichenfolge; Daten:T; Code: Zeichenfolge; } Verwendung von Axios Liste.vue: const { data } = warte auf http.get<IList>('/goods/list', queryForm.value) list.value = data.list <template lang="pug"> //- Anfrageformular el-form(:inline="true" :model="queryForm" Größe="klein" label-position="links") el-form-item el-button(Typ="primär" @click="bedienen") | el-form-item(label="Produktnummer") hinzufügen el-input(v-model="queryForm._id") el-form-item(label="Produktname") el-input(v-model="queryForm.goodName") el-form-item(label="Menge") el-input(v-model="queryForm.count") el-form-item(label="Details") el-input(v-model="queryForm.des") el-form-item el-button(Typ="primär" @click="Abfrage") | Abfrage //- Liste el-table(:data="list" center size="mini") el-table-column(prop="goodName" label="Produktname") el-table-column(prop="Anzahl" label="Menge") el-table-column(prop="des" label="Details") el-table-column(Bezeichnung="Vorgang") Vorlage(#default="Requisiten") el-button(Typ="primär" Größe="klein" @click="operieren(props.row)") | El-Button bearbeiten (Typ = "Gefahr" Größe = "klein" @click = "Operate(props.row, true)") | Löschen //- Hinzufügen, bearbeiten el-drawer(v-model="detailShow" :title="editShow === true ? 'Bearbeiten' : 'Hinzufügen'" direction="rtl") el-form(:Modell="detailForm" Größe="klein" Beschriftungsbreite="80px" Beschriftungsposition="links") //- el-form-item(label="Produktnummer" erforderlich v-if="false") el-form-item(label="Produktnummer" erforderlich v-if="log(editShow)") el-input(v-model="detailForm._id" schreibgeschützt) el-form-item(label="Produktname" erforderlich) el-input(v-model="detailForm.goodName") el-form-item(label="Menge") el-input(v-model="detailForm.count") el-form-item(label="Details") el-input(v-model="detailForm.des") el-form-item el-button(Typ="primär" Größe="klein" @click="senden") | OK</template> <script lang="ts"> importiere { defineComponent, reaktiv, ref } von „vue“; importiere { ElMessage } von 'element-plus' importiere { IGoodInfo, IList } aus '@/types/goods' importiere http von '@/http' exportiere StandarddefiniereKomponente({ Name: "Home", aufstellen() { const list = ref<IGoodInfo[]>([]) const queryForm = ref({ goodName: '', count: '', _id: '', des: '' }) const detailForm = ref({ goodName: '', count: '', _id: '', des: '' }) const detailShow = ref(false) const editShow = ref(false) Abfrage() asynchrone Funktion query() { const { data } = warte auf http.get<IList>('/goods/list', queryForm.value) Liste.Wert = Daten.Liste } asynchrone Funktion operabel (Form?: IGoodInfo, Flag?: true) { wenn (!form) { detailShow.value = true editShow.value = false detailForm.value = { goodName: '', Anzahl: '', _id: '', des: '' } } sonst wenn (!flag) { detailShow.value = true editShow.value = true detailForm.value = { ...Formular } } anders { warte auf http.delete('/goods/delete', { _id: form._id }) Abfrage() } } asynchrone Funktion submit() { wenn (detailForm.value._id) { warte auf http.put('/goods/edit', detailForm.value) }anders{ warte auf http.put('/goods/edit', detailForm.value) } detailShow.value = false ElMessage({ Meldung: „Vorgang erfolgreich“, Typ: "Erfolg", }) Abfrage() } Funktion log(params:any) { konsole.log(Parameter); Rückgabeparameter } zurückkehren { Detailanzeige, bearbeitenAnzeigen, Liste, Abfrageformular, detailFormular, Abfrage, arbeiten, einreichen, Protokoll } } }); </Skript> Typen/Waren.ts Schnittstelle IGoodInfo exportieren { _id: Zeichenfolge; guterName: Zeichenfolge; Anzahl: Zeichenfolge; des: Zeichenfolge } Exportschnittstelle IList { Liste: IGoodInfo[] } Dies ist das Ende dieses Artikels über die Verwendung von Typescript zur Kapselung von Axios. Weitere verwandte Inhalte zur Typescript-Kapselung finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird! Das könnte Sie auch interessieren:
|
<<: Konfigurationslösung für die MySQL Dual-Master-Architektur (Master-Master)
>>: Detaillierte Erklärung zur Verwendung von Rastereigenschaften in CSS
Unterrichtsthemen Webseite Anwendbare Klasse Zwei...
Zuvor habe ich MySQL 5.7 verwendet, aber da MySQL...
1. Einleitung Ich werde hier nicht näher auf Apol...
Inhaltsverzeichnis Thema analysieren Gebrauchsgeg...
Inhaltsverzeichnis 1. Lernziele 1.1. Beherrschen ...
Inhaltsverzeichnis 1. Einführung in Rechnerfunkti...
Inhaltsverzeichnis Hintergrund Zweck Vor der Spal...
Hinweis: Das System ist Ubuntu 14.04LTS, ein 32-B...
Vorwort Leser, die mit MySQL vertraut sind, werde...
Im vorherigen Artikel haben wir drei gängige Meth...
Inhaltsverzeichnis Vorwort 1. Systemdienststeueru...
Vorwort Backup ist die Grundlage der Notfallwiede...
F: Wenn Sie Outlook oder IE verwenden, wird beim ...
Lassen Sie uns zunächst über den Unterschied spre...
1. SHOW PROCESSLIST-Befehl SHOW PROCESSLIST zeigt...