Давно не писал, руки немного сыроваты, извините.
Недавно проект App извлечет один из модулей и превратит его в небольшую программу. Особенности включают в себя:Панель вкладок внизу,строка заголовка вверху
Есть две причины для выбора здесь:
- narBar WeChat изначально не поддерживает настройку значка возврата, а заголовок отображается слева на Android и по центру на iOS.
- Нижняя панель tabBar не поддерживает нажатие для перехода на страницу, а макет значка не поддерживает высоту, превышающую высоту tabBar.
Следующие две картинки — результат простой реализации.
Анализ реализации Адрес источника
Вышеупомянутый эффект также достигается путем обращения к онлайн-примеру, вы можете увидеть исходный анализ эффекта. Или см. мое понимание ниже.
Пользовательские компоненты программы WeChat Mini
Официальный адрес документаDevelopers.WeChat.QQ.com/mini программа…
Пользовательские компоненты объясняются в документации
- Функциональные модули на странице можно абстрагировать в пользовательские компоненты для повторного использования на разных страницах.
- Также можно разделить сложные страницы на несколько модулей с низким уровнем связи, что полезно для обслуживания кода.
Создание пользовательских компонентов
Прямое создание компонентов уже поддерживается в последних инструментах разработки.components
каталог, а затем создайте компонент для каталога, например, здесь создаетсяtabbar
каталог, затем щелкните правой кнопкой мыши каталог и выберите新建Component
, вы можете ввести имя компонента, например, здесь вводtabbar
.
Шаблоны и стили компонентов
официальная документацияDevelopers.WeChat.QQ.com/mini программа…
Как и страницы, пользовательские компоненты имеют свои собственныеwxml
шаблоны иwxss
стиль
В шаблоне компонента вы можете указать<slot>
Узел, который используется для переноса дочерних узлов, предоставляемых при ссылке на компонент. это<slot>
Узлы эквивалентны заполнителям компонентов.
По умолчаниюwxml
поддерживает только один<solt>
Узел, можно настроить для поддержки нескольких<solt>
узел:
После того, как макет написан, вы начинаете задавать стиль, доступ к которому можно получить на странице черезwxss
определить или установить компонентclass
имя перед вызовом компонентаwxss
Определить стиль в стиле.
компонентwxss
По умолчанию не поддерживаетсяapp.wxss
стиле, но может быть установлено столько, сколько<slot>
То же, настроить:
привязка данных шаблона
Вызывая конструктор компонента, вы можете указать свойства, данные, методы и т. д. компонента.Developers.WeChat.QQ.com/mini программа…
Component({
// 详细使用看文档
behaviors: [],
properties: {
myProperty: { // 属性名
type: String, // 类型(必填),目前接受的类型包括:String, Number, Boolean, Object, Array, null(表示任意类型)
value: '', // 属性初始值(可选),如果未指定则会根据类型选择一个
observer(newVal, oldVal, changedPath) {
// 属性被改变时执行的函数(可选),也可以写成在methods段中定义的方法名字符串, 如:'_propertyChange'
// 通常 newVal 就是新设置的数据, oldVal 是旧数据
}
},
myProperty2: String // 简化的定义方式
},
data: {}, // 私有数据,可用于模板渲染
lifetimes: {
// 生命周期函数,可以为函数,或一个在methods段中定义的方法名
attached() { },
moved() { },
detached() { },
},
// 生命周期函数,可以为函数,或一个在methods段中定义的方法名
attached() { }, // 此处attached的声明会被lifetimes字段中的声明覆盖
ready() { },
pageLifetimes: {
// 组件所在页面的生命周期函数
show() { },
hide() { },
resize() { },
},
methods: {
onMyButtonTap() {
this.setData({
// 更新属性和数据的方法与更新页面数据的方法类似
})
},
// 内部方法建议以下划线开头
_myPrivateMethod() {
// 这里将 data.A[0].B 设为 'myPrivateData'
this.setData({
'A[0].B': 'myPrivateData'
})
},
_propertyChange(newVal, oldVal) {
}
}
})
В приведенном выше коде мы можем передатьproperties
а такжеsetData
В сочетании с реализацией данных динамической настройки, вmethods
В , могут быть определены методы, которые используются для внешних вызовов, то есть связи между компонентами.
Связь между компонентами
в состоянии пройти
triggerEvent
Или получить компонент напрямуюthis.selectComponent
Примеры вызова методов и свойств.
- triggerEvent
- Родительский компонент также может получить экземпляр объекта дочернего компонента с помощью метода this.selectComponent, так что вы можете напрямую обращаться к любым данным и методам компонента.
Начните работу с компонентами
на страницеjson
Путь компонента конфигурации в файле, как показано ниже:
{
"usingComponents": {
"navbar": "/components/navbar/index",
"tabbar": "/components/tabbar/tabbar"
}
}
на страницеwxml
Добавьте в макет следующим образом:
// 引入组件
<navbar navbar-data='{{nvabarData}}'></navbar>
// 内容
<view class="home-page">
<view style='margin-top: {{height}}px;margin-bottom:10px;'></view>
</view>
// 引入组件
<tabbar tabbar="{{tabbar}}"></tabbar>
Анализ пользовательского компонента tabBar
См. оригинальный авторский анализ в верхней части статьи. Вот некоторые ямы.
-
Хотя компонент
js
был установлен в файлеtabbar
Но когдаapp.json
еще нужно настроитьtabbar
, подробную настройку можно найти вверху статьиgithub
Связь. -
на странице
onload
нужно установить заново
wx.hideTabBar({
})
Поскольку со страницы обмена нажмите значок дома в верхнем левом углу, чтобы вернуться на домашнюю страницу, будет дваtabbar
, поэтому вам нужно снова скрыть панель вкладок на главной странице.
- Обратите внимание на проблему пути, новая версия средств разработки
components
файл должен быть вminiprogram
вниз, иpages
как одноуровневый, иначе могут возникнуть ошибки в пути к импортируемому компоненту.
Анализ пользовательского компонента navBar
Страница, которой поделились в апплете, не имеет кнопки возврата. Чтобы пользователи могли снова вернуться к нашему апплету, мы настроили кнопку возврата и кнопку возврата на домашнюю страницу на панели навигации.
Здесь через значение сцены апплета и с помощью глобальной переменнойshare
чтобы определить, исходит ли он со страницы обмена. существуетapp.js
Обработано в:
// 判断是否由分享进入小程序
if (options.scene == 1007 || options.scene == 1008) {
this.globalData.share = true
} else {
this.globalData.share = false
};
Чтобы соответствовать высоте верха, вwxml
Макет также динамически устанавливаетmargin-top
Высота, которая получается путем получения высоты строки состояния системы.
getSystemInfo: function () {
let t = this;
wx.getSystemInfo({
success: function (res) {
// 获取高度
t.globalData.height = res.statusBarHeight;
}
});
},
потом на страницеdata
Установите высоту данных компонента и строки состояния в:
data: {
// 组件所需的参数
nvabarData: {
showCapsule: 0, //是否显示左上角图标 1表示显示 0表示不显示
title: '让故事发生', //导航栏 中间的标题
},
// 此页面 页面内容距最顶部的距离
height: app.globalData.height * 2 + 20,
// tabbar
tabbar: {},
},
Первоначальная авторская логика отображения и скрытия значков не соответствует моим ожиданиям.Чего я хочу добиться, так это отображения значка возврата домой в верхнем левом углу после входа со страницы обмена.Обычно отображается только кнопка возврата. измененная точкаwxml
следующим образом:
<view bindtap='_navback' wx:if='{{!share}}'>
<image src='/images/back.png' mode='aspectFill' class='back-pre'></image>
</view>
// 这里把 share 取反去掉
<view class='navbar-v-line' wx:if='{{share}}'></view>
// 这里把 share 取反去掉
<view bindtap='_backhome' wx:if='{{share}}'>
<image src='/images/icon/icon_home.png' mode='aspectFill' class='back-home'></image>
</view>
Эта статья закончена~, если она вам понравилась, пожалуйста, поставьте лайк.