первоначальное намерение
Недавно компания собирается разработать апплет для электронной коммерции. Предыдущий mpvue был остановлен и больше не выбирается. Неинтересно быть нативным. Поскольку это вечеринка Vue, команда выбрала uni-app для проверки воды. и использовал его больше недели.Ощущение использования все еще в порядке. Если вы знаете vue, это просто безмозглая разработка.Прочитав эту статью, вы можете начать прямо.
Загрузка подпакета небольшой программы:Связь
Основной принцип реализации:Связь
Uni-App Runtime:
Логический уровень и уровень представления разделены, и связь на стороне, отличной от H5, скомпрометирована.
Когда uni-приложение работает на стороне, отличной от H5,"С точки зрения архитектуры он разделен на две части: логический уровень и уровень представления.". Слой логики отвечает за выполнение бизнес-логики, то есть запуск js-кода, а слой представления отвечает за отрисовку страницы.
Хотя разработчики пишут js и css на странице vue, на самом деле они уже разделены во время компиляции.
Подробный логический слой
Логический уровень выполняется на"В автономном jscore", это не зависит от нативного webview, так что с одной стороны это"Нет проблем с совместимостью браузера", он может запускать код es6 на Android 4.4, с другой стороны, он не может запускать специфичные для браузера js API, такие как window, document, navigator и localstorage.
❝Механизм js на стороне приложения и апплета uni-app фактически дополняет набор API-интерфейсов JS, обычно используемых на мобильных телефонах в jscore, таких как сканирование кода.
❞
Просмотр сведений о слое
Обычно: h5 и платформы апплетов, а также app-vue, уровень просмотра — webview. Уровень представления app-nvue — это собственное представление, преобразованное на основе weex.
У js uni-app в принципе нет проблем с совместимостью с разными мобильными телефонами (поскольку js движок идет с ним), а css слоя представления будет иметь мобильные браузеры на app-vue."css проблемы с совместимостью". Итак, в сценарии app-vue"Старайтесь не использовать слишком новый синтаксис css", если только вы не планируете поддерживать недорогие машины.
Конечно есть плюсы и минусыПосмотреть детали
создание проекта
два пути
1. Через визуальный интерфейс HBuilderX
Это очень просто использовать из коробки, нет необходимости настраивать nodejs.
После загрузки IDE нажмите «Файл» -> «Создать» -> «Проект» на панели инструментов, выберите шаблон, который вам нравится, и все готово (рекомендуется hello uni-app).
2. Через командную строку vue-cli(Рекомендуется vue-игроками)
Он поддерживается vuecli3.0+, поэтому его необходимо сначала установить.npm install -g @vue/cli
Затем = "Создайте проект: vue create -p dcloudio/uni-preset-vue my-project
Поставляется с различными сценариями, шоу не хорошо! Таким образом, вы можете устанавливать всевозможные препроцессоры css, сторонние плагины и т. д., которые вы хотите, и все, кто играет в проекты Vue, это понимают.
О поддержке NPM
В проекте cli по умолчанию уже есть package.json. Проект, созданный HBuilderX, не имеет его по умолчанию и должен быть создан с помощью команды инициализации.
О конфигурации страницы
Поместите его так же, как апплет: pages.json
{
"pages": [{
"path": "pages/component/index",
"style": {
"navigationBarTitleText": "组件"
}
}]
}
спецификация разработки
Для достижения совместимости с несколькими терминалами всесторонне учитываются такие факторы, как скорость компиляции и производительность.uni-app
Согласованы следующие спецификации разработки:
- Файл подкачки следует написанию в стиле vue.Спецификация однофайлового компонента Vue
- Метка компонента близка к спецификации апплета (например, базовый вид, текст, изображение) для получения подробной информации.спецификация компонента универсального приложения
- Возможности интерфейса (JS API) близки к спецификации апплета WeChat, но должны иметь префикс
wx
заменитьuni
, видетьспецификация интерфейса uni-app -
"Привязка данных и обработка событий одинаковы
Vue.js
Технические характеристики", дополняя жизненный цикл Приложения и страницы - Для совместимости с многотерминальной операцией рекомендуется использовать гибкий макет для разработки.
Описание пути к ресурсу
-
@
Абсолютный путь и относительный путь в начале будут проверяться правилами преобразования base64.
Введение статических ресурсов в шаблоны
<!-- 绝对路径,/static指根目录下的static目录,在cli项目中/static指src目录下的static目录 -->
<image class="logo" src="/static/logo.png"></image>
<image class="logo" src="@/static/logo.png"></image>
<!-- 相对路径 -->
<image class="logo" src="../../static/logo.png"></image>
импорт файла js
/ 绝对路径,@指向项目根目录,在cli项目中@指向src目录
import add from '@/common/add.js'
// 相对路径
import add from '../../common/add.js'
css вводит статические ресурсы
/* 绝对路径 */
@import url('/common/uni.css');
@import url('@/common/uni.css');
/* 相对路径 */
@import url('../../common/uni.css');
страница
getCurrentPages()
Функция используется для получения экземпляра текущего стека страниц, который задается в порядке стека в виде массива, первый элемент — домашняя страница, а последний элемент — текущая страница.
**Лучше распечатать и посмотреть необходимую информацию const pages = **getCurrentPages()
измерительное устройство
uni-app
Общие поддерживаемые единицы CSS включают px, rpx
- "px"то есть пиксели экрана
- "rpx — отзывчивый px", динамическая единица, которая адаптируется к ширине экрана. Исходя из ширины экрана 750, 750rpx — это именно ширина экрана. Когда экран становится шире, фактический эффект отображения rpx будет пропорционально увеличен.
Жизненный цикл
ПодробностиСвязь
onLoad | Контролировать загрузку страницы, в основном через это, чтобы получить параметры страницыonLoad(option)}{} ,Ссылаться наПример
|
---|---|
onShow | Отображение страницы монитора. Запускается каждый раз, когда страница появляется на экране, включая возврат из подчиненной точки страницы для отображения текущей страницы. |
onReady | Прослушайте завершение первоначального рендеринга страницы. Обратите внимание, что если скорость рендеринга высокая, она будет запущена до того, как страница войдет в анимацию. |
onHide | Скрытие страницы монитора |
onUnload | Отслеживание выгрузки страницы |
Информационный бюллетень глобальной страницы
Инициировать глобальное пользовательское событие
uni.$emit(eventName,OBJECT)
Дополнительные параметры передаются обратному вызову слушателя. Каштан:uni.$emit('update',{msg:'页面更新'})
Слушайте глобальные пользовательские события
uni.$on(eventName,callback)
События могут быть запущены с помощью uni.$emit, и функция обратного вызова получит все дополнительные параметры, переданные в функцию запуска события.
uni.$on('update',function(data){
console.log('监听到事件来自 update ,携带参数 msg 为:' + data.msg);
})
"Меры предосторожности"
-
uni.$emit、 uni.$on 、 uni.$once 、uni.$off
Инициированные события"Глобальный уровень приложения для любого компонента, страницы, nvue, vue и т. д." - При использовании обратите внимание на своевременное уничтожение обработчика событий, например, на странице onLoad
uni.$on
Зарегистрируйте слушателя внутри onUnloaduni.$off
Удалить, или одноразовое событие, использовать напрямуюuni.$once
монитор
стиль
При использовании компонента uni-app иногда изменение стиля внутреннего компонента недопустимо, вам необходимо использовать/deep/ .xxx { }
вступить в силу.
общий режим страницы
<template>
<view class="container">
<view class="user-section">
<image class="bg" src="/static/user-bg.jpg"></image>
</view>
<view class="info-box">
<text class="username">{{userInfo.nickname || '游客'}}</text>
</view>
</view>
</template>
// 基本上和vue一摸一样
<script>
import { getMyInfo } from '@/api/my.js'
import { mapState } from 'vuex';
import mixins_share from '@/mixins/share.js'
export default {
mixins: [mixins_share],
data() {
return {
userInfo: {},
vipTheme: {
},
};
},
computed: {
...mapState(['accessToken'])
},
onLoad(option) {
this.nickName = option.nickName
},
onShow() {
},
methods: {
scroll: function(e) {
console.log(e);
},
goOrderList() {
uni.navigateTo({
url: '/pages/orderList/list'
})
}
}
};
</script>
// 使用 css插件需要安装
<style lang="scss" scoped>
.mine {
min-height: 100vh;
background-color: #f5f5f5;
.mine-header {
}
}
</style>
Меры предосторожности:
- Жизненный цикл страницы отдает приоритет использованию набора апплетов,
onLoad(option) {}
получить параметры,onShow() {}
отображается страница.
метод перехода на страницу
Сохранить текущую страницу и перейти на страницу
использоватьuni.navigateBack
Вы можете вернуться на исходную страницу.
/在起始页面跳转到test.vue页面并传递参数
uni.navigateTo({
url: 'test?id=1&name=uniapp'
});
Примечание: перейти к"tabBar"Страницы можно использовать только"switchTab"Прыгать
Закройте текущую страницу и перейдите на страницу в приложении.
uni.redirectTo(OBJECT)
Перейдите на страницу tabBar и закройте все остальные страницы без tabBar.
uni.switchTab(OBJECT)
Закрыть текущую страницу и вернуться на предыдущую страницу или многоуровневую страницу
uni.navigateBack(OBJECT)
доступныйgetCurrentPages()
Получите текущий стек страниц и решите, сколько слоев нужно вернуть.
// 在C页面内 navigateBack,将返回A页面
uni.navigateBack({
delta: 2
});
Хотите узнать больше? В этот момент я официально начну
кеш данных
Для синхронизации следует +Sync, например:uni.setStorageSync
Данные хранятся в локальном кеше (асинхронный интерфейс)
uni.setStorage(OBJECT)
В указанном ключе содержимое, соответствующее исходному ключу, будет перезаписано.
uni.setStorage({
key: 'storage_key',
data: JSON.stringify(data), // 需要存储的内容,只支持原生类型、及能够通过 JSON.stringify 序列化的对象
success: function () {
console.log('success');
}
});
Получить содержимое, соответствующее указанному ключу, асинхронно из локального кеша
uni.getStorage({
key: 'storage_key',
success: function (res) {
console.log(res.data);
}
});
Асинхронно удалить указанный ключ
uni.removeStorage({
key: 'storage_key',
success: function (res) {
console.log('success');
}
});
Очистите локальный кэш данных.
uni.clearStorage()
Уведомление:
Хранилище uni-app реализовано по-разному на разных концах:
- Сторона H5 — это localStorage, и браузер ограничивает размер до 5 МБ, что является концепцией кеша и может быть очищено.
- Сторона приложения является родной plus.storage, без ограничений по размеру, без кеша, но постоянно
- У каждого апплета есть собственный API-интерфейс хранилища, а жизненный цикл хранения данных соответствует самому апплету, то есть, если пользователь не удалит его активно или не будет автоматически очищен через определенный период времени, данные всегда доступны.
- Максимальная длина данных, которую можно сохранить с помощью одного ключа программы WeChat Mini, составляет 1 МБ, а верхний предел хранения всех данных составляет 10 МБ.
- После преобразования одного фрагмента данных в апплете Alipay в строку максимальная длина строки составляет 200*1024. Для одного и того же пользователя Alipay общий лимит кеша для одного и того же апплета составляет 10 МБ.
- В документах апплета Baidu, ByteDance не указаны ограничения по размеру
Хотите узнать больше? В этот момент я официально начну
сетевой запрос
Инициируйте сетевой запрос:Введение на официальном сайте
uni.request({
url: 'https://www.example.com/request', //仅为示例,并非真实接口地址。
data: {
text: 'uni.request'
},
header: {
'custom-header': 'hello' //自定义请求头信息
},
success: (res) => {
console.log(res.data);
this.text = 'request success';
}
});
- Рекомендуется контролировать объем данных одного сетевого запроса, чтобы он не превышал 50 КБ (относится только к данным json, исключая изображения).Избыточные данные должны быть получены на страницах для улучшения работы приложения.
Загрузить файл (изображение)
uni.uploadFile(OBJECT)
по мере прохождения страницыuni.chooseImageПосле того, как интерфейс получит путь к временному файлу локального ресурса,"Вы можете загружать локальные ресурсы на указанный сервер через этот интерфейс". Кроме того, выберите и загрузите неизображения и видеофайлы для справки:спросите. Когда cloud.net.can/article/355….
uni.chooseImage({
success: (chooseImageRes) => {
const tempFilePaths = chooseImageRes.tempFilePaths;
uni.uploadFile({
url: 'https://www.example.com/upload', //仅为示例,非真实的接口地址
filePath: tempFilePaths[0],
name: 'file',
formData: {
'user': 'test'
},
success: (uploadFileRes) => {
console.log(uploadFileRes.data);
}
});
}
});
Манипуляции с медиафайламиВведение на официальном сайте
Общие операции интерфейсаВведение на официальном сайте
Другие вспомогательные функцииВведение на официальном сайте
В чем разница между созданием проекта с помощью cli и созданием проекта с помощью визуального интерфейса HBuilderX
Различия компиляторов
-
cli
Созданный проект, компилятор устанавливается под проект. И не будет следовать обновлению HBuilderX. Чтобы обновить компилятор, выполнитеnpm update
. - Проект, созданный визуальным интерфейсом HBuilderX, компилятор находится в каталоге плагинов в каталоге установки HBuilderX, и компилятор будет автоматически обновлен при обновлении HBuilderX.
- уже использован
cli
Если вы хотите продолжить использование созданного проекта в HBuilderX, вы можете перетащить проект в HBuilderX."Обратите внимание, что если весь проект перетаскивается в HBuilderX, при компиляции используется компилятор проекта. Если каталог src перетаскивается в HBuilderX, берется компилятор из каталога плагинов в каталоге установки HBuilderX.". -
cli
Если вы хотите установить less, scss, ts и другие компиляторы, вам нужно вручную установить npm самостоятельно. Недопустима установка в интерфейсе управления плагинами HBuilderX, который работает только с проектом, созданным HBuilderX.
Эпилог
Все оценки служат лишь основой для принятия решений, а окончательный результат по-прежнему зависит от технологического стека команды разработчиков, требований бизнеса и планов на будущее. Однако в качестве заключения обзорной статьи мы все же должны дать свои предложения:
- Если вы знакомы с React и не понимаете Vue.js, рекомендуется Taro;
- Если вы знакомы с Vue.js, рекомендуется использовать uni-app;
- Если у вас уже есть код H5, вы просто хотите увеличить платформу апплета WeChat и не предъявляете высоких требований к производительности, вы можете рассмотреть kbone;
- Если ваш бизнес включает в себя несколько целей, более рекомендуется использовать uni-app;
- Если вы хотите быстро запустить свой бизнес с помощью бессерверного решения, рекомендуется использовать uni-app.
❝Этот эпилог взят из рассказа большого парня по соседству: Автор: CHB Ссылка:nuggets.capable/post/684490…
❞
Сначала здесь, и больше обеспокоен поздним обновлением медленно ~
журнал проблем
1. Описание требования: страница апплета является общей с параметром u=userid.Когда другие откроют ее, она впервые перейдет к onLaunch, чтобы получить параметры и сохранить их. Если userid, предоставленный другим человеком, отличается, когда onLaunch в это время не оставлен, как получить параметры?
Решение: миксин в main.js"onLoad"
Vue.mixin({
onLoad(options){
// 获取到参数 操作
}
}
2. Глобально добавить функцию совместного использования, чтобы каждую страницу можно было совместно использовать в характерном режиме."решение:"
Vue.mixin({
onShareAppMessage(e) {
const merchant = this.$store.getters.merchant
return {
title: merchant.subName,
path: `/pages/tabBar/vhome${'?refId='+this.$store.getters.userInfo.uid}`,
imageUrl: merchant.posterImg
}
}
})
В этой статье используетсяmdniceнабор текста