Методы работы
Метод request является обёрткой над axios и добавляет перехват запросов и ответов.
Расположение файла: src/utils/request.util.js
Перехват запросов
serialize : true
в заголовках автоматически выполняется операция urlEncode для параметра data, по умолчанию используется формат json для отправки post-запросов.Перехват ответов
resp = {
"code": 200, // 状态码 100:обычная ошибка с сообщением;200:нормально;
"message": "", // текстовая информация
"data": null // содержимое, может быть любого формата
}
Перехватчик автоматически распознаёт код состояния. Если код равен 200, то возвращается data. Поэтому при использовании функции request в then-блоке обратного вызова параметром будет data, а не весь контент обратной связи. Если код не равен 200, будет выполнена функция code[code] из src/utils/response.error.util.js. Если такой функции нет, она игнорируется. Можно определить различные функции code в этом файле. Можно настроить дополнительные параметры в соответствии с требованиями.
Использование метода request
Метод 1: прямой ввод параметров axios для возврата Promise-объекта.
import {request} from "@/utils/request.util";
request({
url : 'api/address',
method: 'get',
params: {
id: 1
}
}).then( resp => {
// здесь resp возвращает обработанное содержимое data
console.log( resp );
})
* **Метод 2**: цепочка вызовов функции request.
```javascript
import {request} from "@/utils/request.util";
// В настоящее время предоставляются только методы get и post, другие должны быть добавлены самостоятельно.
request("api/address").get({id : 1}).then( resp => {
console.log( resp );
})
<template>
<div class="">
<ezm-layout>
<van-nav-bar
slot="nav"
title="Выпадающая загрузка с вытягиванием вверх"
left-arrow
@click-left="g_navigate.back()"
></van-nav-bar>
<!-- Компонент бесконечной прокрутки -->
<!-- Для использования выпадающей или вытягивающей вверх функций необходимо передать объект разбивки на страницы -->
<ezm-scroll-box
:pull-down="true"
:pull-up="true"
:paginate="paginate"
>
<van-cell
v-for="item in list" :key="item.id"
:title="item.title"
:label="item.label"
:value="item.id"
></van-cell>
</ezm-scroll-box>
</ezm-layout>
</div>
</template>
<script>
import EzmLayout from "@/components/layout/ezm-layout";
import EzmScrollBox from "@/components/scroll/ezm-scroll-box";
import Paginate from "@/utils/paginate.util";
import {mockUtil} from "@/utils/common.util";
import {request} from "@/utils/request.util";
import {PageMixin} from "@/mixin/navigate.mixin";
export default {
name: 'BetterScrollAll',
mixins: [PageMixin],
components: {EzmScrollBox, EzmLayout},
data() {
return {
// Создание объекта разбивки на страницы
// Объект разбивки на страницы принимает два параметра Function: обратный вызов выпадающей или вытягивающей вверх функции (необязательно) Integer: количество элементов на странице
paginate: new Paginate(this.getList),
list: [],
}
},
methods: {
/**
* При входе на страницу эта функция будет автоматически запущена
* Возврат на эту страницу не вызовет выполнения
*/
init() {
// Автоматически запускает операцию выпадающей загрузки
this.paginate.autoPullDown();
},
/**
* Функция, которая будет вызываться при выпадающей и вытягивающей вверх обратных вызовах
* paginate автоматически передаст параметр refresh при вызове этой функции
* Выпадающая загрузка передаст true, вытягивающая вверх загрузка передаст false
* @param refresh Является ли это выпадающей загрузкой
*/
getList(refresh = false) {
// Предварительно использовать mockjs для имитации данных, если есть реальный интерфейс, не нужно имитировать
this.mockData();
``` **Запрос интерфейса BetterScrollAll и передача параметров разбивки на страницы**
// Запрос интерфейса BetterScrollAll и передача параметров разбивки на страницы
request('BetterScrollAll')
.get(this.paginate.getRequestParams())
.then(resp => {
// Добавление данных в список или его расширение
this.list = refresh ? resp.records : this.list.concat(resp.records);
// Завершение загрузки данных
// Не забудьте передать resp, paginate будет использовать результат resp для определения наличия следующей страницы
// Отображение различного содержимого внизу, например «больше нет» и т. д.;
this.paginate.finishLoading(resp);
})
// Если запрос не удался, необходимо вызвать завершение загрузки данных
// Нет необходимости передавать параметры, просто завершите анимацию загрузки
.catch(_ => this.paginate.finishLoading());
},
/**
* Имитация 2 страниц полных данных,
* Третья страница содержит 5 записей
*/
mockData() {
mockUtil.mock(/BetterScrollAll/i, 'get', {
code: 200,
message: '',
data: {
current: this.paginate.toPage,
size: this.paginate.size,
[`records|${this.paginate.toPage > 2 ? 5 : this.paginate.size}`]: [{
'id|+1': (this.paginate.toPage - 1) * this.paginate.size + 1,
'title': '@cname',
'label': '@name',
}],
}
});
};
Все знают, что у одностраничных приложений есть некоторые проблемы, такие как открытие диалогового окна, а затем нажатие кнопки «Назад» в браузере, диалоговое окно не исчезает. Поэтому при открытии диалогового окна можно добавить функцию закрытия диалогового окна в очередь задач, и при закрытии диалогового окна ранее добавленная функция задачи удаляется из очереди задач.
Функции в очереди задач будут выполняться перед уходом со страницы. Если вы принудительно нажмёте кнопку «Назад» браузера, все функции в очереди задач будут выполнены сразу. Например, если вы вызываете метод навигации для перехода вперёд или назад, функции в очереди будут выполняться последовательно (в обратном порядке).
Подробные примеры можно найти в демоверсии. Здесь представлен пример настройки Dialog.config для vant.
let confirm = (content, title = "确认信息", type = 'warning') => {
let dialog = Dialog.confirm({
title: title,
message: content,
});
let task = Events.addWaitTask(() => Dialog.close());
return dialog.then(() => {
Events.removeWaitTask(task);
return Promise.resolve();
}).catch(() => {
Events.removeWaitTask(task);
return Promise.reject();
})
}
Метод | Функция | Параметр | Возврат | Примечание |
---|---|---|---|---|
addWaitTask | Добавить задачу | Function: задача | WaitForTask: задача | |
removeWaitTask | Удалить задачу | WaitForTask: задача, | String: идентификатор задачи | Очистить все задачи, если оставить пустым |
export class WaitForTask {
constructor(id, task) {
this.id = id;
this.task = task;
}
id = '';
task = null;
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )