предисловие
Некоторые студенты уже напомнили об использовании
axios.create()
,использоватьaxios.create()
может решить следующее1 、2、3、5
Пункт, арендодатель также рекомендует использовать этот метод, так какaxios
уже предоставил такиеAPI
, то нет необходимости реализовывать его таким образом, что немного лишнее. Так что эта статья в значительной степени бессмысленна, но она также является хорошим выбором для особых случаев, таких какчетвертая точка, который можно настроить в соответствии с потребностями вашего бизнеса.
Опять такиОбертывание AJAXПреимущества, которые вы не можете себе представить! Будь то для кодаЭффективное управление,ещеСистемный дизайн... преимущества выходят далеко за рамки вашего воображения.
Зачем нужно инкапсулировать
Сначала рассмотрим следующие сценарии приложений, включающие 100 проектов.AJAX
просить,в:
- 60 из них должны быть взаголовок запросанастраиватьtoken
headers: {token: token}
для проверки разрешения; - 20 из нихЗагрузить EXCEL-файлЕго нужно указать в заголовке запроса.Content-Type;
headers: {
'Content-Type': `multipart/form-data; boundary=${data._boundary}`
}
- ③ Используются последние 20 запросов
获取文件流
, вам нужно указать тип принятияresponseType: 'blob'
- Нужда вИнициировать запрос глобальнопровестиперехватыватьи делайАсинхронная обработка(подчеркивать:ДаАсинхронная обработка);
- Если ваш проект наполовину сделан, теперь серверная часть должнаплюс разрешение токенапройти сертификацию;
1, 2 и 3, упомянутые выше, можно найти вГлобальный
request
перехватпроцесс, ноочень дорого, нужно для всех 100 интерфейсоввыносить решения, а затем действовать соответственно... ;Конечно, также можно определить каждый интерфейс отдельно без глобального перехвата.Я думаю, что многие студенты до сих пор справляются с этим таким образом.ноПока есть изменения, например, теперь я требую, чтобы все заголовки запросов добавляли параметр, его можно изменить только по одному интерфейсу. Это не тот результат, которого мы хотим, поэтому нам нужноПереупаковка AJAX! Переупаковка AJAX! Переупаковка AJAX!, потому что это очень важно, поэтому я должен сказать это еще несколько раз....
Для четвертого случая, в axios, если вы можете выполнять только некоторые синхронные операции над запросом, если вы делаете асинхронный, вы сообщаете об ошибке напрямую... Но это также можно использоватьОбертывание AJAXреализовать! Это просто черная магия... круто...
Реализация пакета
Упаковка на самом деле очень простая, это оригинальная настоящаяAJAX устанавливает оболочку,оболочкато естьфункция!В этой функции делаются какие-то невидимые? Вы можете делать что угодно. 1, 2, 3, 4 и 5, упомянутые выше, можно сделать здесь спокойно.Связные вызовы AJAXЭто имеет значение? Ответ да:Нет эффекта.Давайте сначала посмотрим на AJAX, который я вызываю в коде:
_initEditParams () {
this.$axios('Common/Permission/Get', {Id}).then(res => {
....
....
})
},
не так лиВызов AJAX напрямуютакжекраткий? Да, потому что все элементы конфигурации, такие как метод запроса, помещаются в пакет.
подождите... используется здесь
this.$axios
Способ называется, вроде ничем не отличается от того, что использую я... Да тут тоже черезVue.prototype.$axios = axios
добавить вvueглобальный экземпляр, но добавленный здесьaxios
не импортируется напрямуюплагин аксиомЭтометод
import {axios} from './utils/common'
Vue.prototype.$axios = axios
Конечно. Вы также можете не добавлять его в глобальный инстанс, вы можете передать его в компоненте
import
Синтаксис введен для использования. Конечно в проектеШироко используемые методы упаковкиИспользовать напрямуюVue.prototype
добавить вvue
пример. Далее посмотримЧто делает метод axios?:
import Axios from 'axios'
import Store from '../vuex'
/*********************************
** Fn: axios
** Intro: 公用封装的axios 已在main.js中进行 $axios代理
** Intro: Store.state.permission.constUrl 为公用的接口前缀地址
** Intro: url 方法接受参数 为定义的 接口地址后缀
** Intro: data 方法接受参数 为定义的参数
** Author: zyx
*********************************/
export function axios (url, data) {
return new Promise((resolve, reject) => {
Axios({
url: `${Store.state.permission.constUrl}${url}`,
method: 'post',
data: data,
headers: {
token: Store.state.permission.token
}
}).then(res => {
resolve(res)
}).catch(err => {
reject(err)
})
})
}
Ключевым моментом в этом методе является то, что
Promise
! ТолькоPromise
Может встретить цепной вызов.Promise
Это хорошо, конкретноPromise
Я не буду объяснять здесь грамматику, потому что говорить ее нехорошо.Promise
Есть три состояния,pending,resolveа такжеreject. Хорошо, что вы можете сохранитьPromise
иметь дело ссостояние ожидания (можно понимать как ожидание), чувствовать себя хорошо, простоresolve()
выпуск, в.then()
относитесь к этому соответственно. Если у вас плохое настроение, просто прямоreject()
перезвони тогда.catch()
иметь дело с. (намекать:Promise
Его также можно использовать для связи между родительскими и дочерними компонентами, используяresolve()
)
Поддержите его лайком, чтобы поощрить его~
Личная рекомендация других статей:
- Добавлю одно: IE9 не поддерживает заголовки запросов AJAX, и бесплатные студенты попадают в яму.
- Реализовать бесконечно сворачиваемую таблицу
- Когда данные выпадающего списка слишком велики, как с этим бороться?
- Пользовательская директива Vue реализует ограничение ввода положительное целое число
- Уведомление об авторских правах: Эта статья была впервые опубликована в Nuggets, если вам нужно перепечатать, пожалуйста, укажите источник.