предисловие
Я немного бездельничал в последнее время, я вспомнил многолетнее вниманиеmpvue
Я написал небольшую программу, поэтому написал ее спустя чуть больше полумесяца.github
запущена версия апплета WeChat. Теперь резюмируем встречающиеся ямы.
опыт сканирования кода,
адрес проекта, GitHub.com/сыр сонный/я…
Мина яма
высота прокрутки
Прокручиваемая область просмотра.
При использовании вертикальной прокрутки вам нужно дать
<scroll-view/>
Фиксированная высота, высота устанавливается через WXSS.
предоставлено апплетомscroll-view
Компонент, если вы хотите, чтобы он прокручивался, вы должны предоставить ему фиксированную высоту.
Наше общее требование состоит в том, что предыдущая область фиксирована, а следующая область может быть прокручена Мое решение состоит в том, чтобы получить видимую высоту модели, вычесть высоту предыдущей фиксированной области и назначить ее динамически.scroll-view
Окончательная высота.
// 以 search 页为例
// 滚动区域高度 = 总高度 - 搜索框高度 - tabs 高度
onLoad () {
wx.getSystemInfo({
success: (res) => {
this.height = res.windowHeight // 获取机型可视高度
}
})
let query = wx.createSelectorQuery()
// 选择id
query.select('#search').boundingClientRect()
query.exec(res => {
let searchH = res[0].height // 获取search框高度
this.height = this.height - searchH - this.tabsH
})
}
Яма:wx.createSelectorQuery()
не могу понятьdisplay: none
высота элемента.
Мое решение: вtrending
страница, чтобы получитьtabs
высоту компонента, а затем сохраните его вvuex
в, дайsearch
использование страницы
Жизненный цикл (одна и та же страница имеет разные параметры)
Когда мы заходим на страницу ② со страницы ①, мы обычноonLoad
получить исходные данные,
При возврате со страницы 2 на страницу, если две страницы разные страницы, например① — страница/информация,
② это страница/репозиторий, все в порядке, ① страницаunOnLoad
, ② стр.onShow
.
Но если① это страница/информация?user=a,② это страница/информация?user=b, затем gg, вернуться со страницы ② на страницу ①, данные страницы ① станут данными страницы ②
Чтобы избежать этого, я сначала использовалonShow
заменятьonLoad
, то есть вonShow
При получении исходных данных страницы. Но эта ситуация немного пугает, мы знаемonShow
Запустится множество ситуаций, переключение вперед и назад, возврат с одной страницы на другую, вызоветonShow
, что приводит к запуску множества ненужных запросов, а взаимодействие с пользователем крайне плохое.
Но многие из моих потребностей похожи на① это страница/информация?user=aприбыть② это страница/информация?user=b, так кривую спасать страну придумалиvuex
Поддерживайте стек маршрутизации со связанными страницами требований.
страницаonLoad
, поместите параметр запроса в стек,onShow
, если параметры текущей страницы совпадают с параметрами последнего элемента в стеке, данные не будут перезагружены. При уничтожении страницыonUnload
Соответствующий стек страниц выталкивается наружу. Это позволит избежать многих бесполезныхonShow
просить.
onLoad () {
this.reset()
const options = getQuery()
user = options.login
// vuex
this.reposStack.push(options)
this.getRepos()
},
onShow () {
const options = getQuery()
// vuex
let reposStack = JSON.parse(JSON.stringify(this.reposStack))
let len = reposStack.length
let endStack = reposStack[len - 1]
if (JSON.stringify(endStack) === JSON.stringify(options)) {
return
}
this.reset()
user = options.login
this.getRepos()
},
onUnload () {
// vuex
this.reposStack.slice(0, -1)
}
Mpvue Pit.
параметр запроса
mpvue
в состоянии пройтиthis.$root.$mp.query
Получить параметры пути внутри компонентов на всех страницах.
Если сmina
С точки зрения слов, мы прошли в жизненном циклеonLoad(options)
, получатьoptions
Параметры пути, передаваемые вmpvue
при условииthis.$root.$mp.query
, которые мы можем использовать на всех жизненных циклах.
Но мы знаем, что когда мы возвращаемся с текущей страницы на предыдущую, предыдущая страница не выполняется.onLoad()
,
Предполагая, что текущая страница и предыдущая страница совпадаютpage
, но если параметры другие, вернуться на предыдущую страницу в это время,
Предыдущая страницаthis.$root.$mp.query
Не превратится в себяquery
он все еще будет стать текущей страницейquery
Пример: ①страница/информация?a=1 => ②страница/информация?b=2
Когда я вернусь из ② в ①, ①this.$root.$mp.query
станет{b:2}
наверноеmpvue
изthis.$root.$mp.query
черезonLoad(options)
получатьoptions
, и назначьте его снова. Но он не будет выполнен, когда страница апплета будет возвращенаonLoad
Чтобы избежать проблем, я использовал API апплета напрямую.getCurrentPages()
, получить параметры последнего маршрута в стеке маршрутизации
getCurrentPages()
Функция используется для получения экземпляра текущего стека страниц, который задается в порядке стека в виде массива, первый элемент — домашняя страница, а последний элемент — текущая страница.
/**
* 获取当前路径参数
* 不用mpvue提供的this.$root.$mp.query
* 因为其进入同一页面,参数不会变化
*/
export function getQuery () {
/* 获取当前路由栈数组 */
const pages = getCurrentPages()
const currentPage = pages[pages.length - 1]
const options = currentPage.options
return options
}
постскриптум
Первые несколько вопросов - мое первое использованиеmpvue
Самая большая яма встречается при разработке небольших программ. (Давно ничего не писал, и почерк ужасный.) Но пользуюсьmpvue
Разрабатывать небольшие программы, можно разбивать на компоненты, поддерживатьnpm
, гораздо удобнее, чем нативная разработка. Опыт еще хороший.
Небольшие программы сейчас очень популярны. Это похоже на фронт-энд, чтобы играть.
Введите адрес проекта еще раз, и заинтересованные друзья смогут сослаться на него.GitHub.com/сыр сонный/я…