一.分類 1.1 頁面佈局 首先創建cate的分支 定義基本結構,因為是兩個需要滾動的區域,所以這裡要用到組件 ==scroll== 這個組件如果是y scroll那就要固定高度,x scroll那就要固定寬度 這裡有個問題就是,我們應該把高度限定在整個屏幕高度 這裡用到uniapp一個api == ...
一.分類
1.1 頁面佈局
首先創建cate的分支
定義基本結構,因為是兩個需要滾動的區域,所以這裡要用到組件 scroll
這個組件如果是y scroll那就要固定高度,x scroll那就要固定寬度
這裡有個問題就是,我們應該把高度限定在整個屏幕高度
這裡用到uniapp一個api uni.getSystemInfoSync()他可以獲得很多信息,比如該手機型號、以及平臺、還有整個屏幕寬高以及內容區域寬高等
1.2 一級分類
先獲取數據
然後開始渲染
註意block類似於template不占用空間組件
然後動態active的變化
註意如果是多個class使用數組包起來
然後點擊事件
1.3 二三級分類
二三級分類是跟著一級分類一起來的數據,所以可以在一開始就接收第一個active的數據,再通過改變active的點擊事件來切換列表
然後就可以渲染到頁面
二級分類就出來了
三級分類直接渲染即可
1.4 重置滾動條,跳轉分包
現在的頁面是有一個bug的
當我們瀏覽一半到這裡再次點擊一級分類,會發現還是在這個位置,有點類似於路由的滾動行為
這裡的解決思路是 scroll組件有一個屬性scroll-top 可以定位到豎向滾動條的位置
但是這樣並不會生效,因為我們的scrollTop始終沒變過,所以你給他賦值0,他發現他本來就是0就不會有賦值的操作,頁面也就響應不到
然後點擊三級分類每一項跳轉到分包商品詳情頁去
註意tabBar是用switchTap來跳,分包非tabBar頁面使用navigateTo來跳
1.5 分支合併提交
主要就是記住分支暫存提交推送後,到主分支要先暫存提交,再合併,再來推送
二.搜索
先創建search分支
2.1 自定義搜索組件
uni創建自定義組件
在 uni-modules新建插件
而且不用註冊,直接在頁面使用即可
該效果本質上是在這裡展示用的,當一點擊回調往真正的搜索頁面
這裡如果要把我們的背景顏色和邊框圓角弄成動態的,其實就是vue的props
回憶一下對象寫法
用在組件上,註意屬性名和值都要加引號
註意一下uni提供了一些組件,uniui在官方文檔上
接下來回顧一下自定義事件,也就是我們怎麼讓頁面點擊這個組件我們跳轉到搜索頁面
綁定自定義事件
組件通過emit,規定觸發的時機以及發送數據
2.1.1 導航跳轉與吸頂效果
首先導航跳轉
先創建一個分包
然後跳轉非tabBar用navigateTO
然後再home頁面也需要一個
但是在這個頁面就出現了問題,會跟著頁面飄起走
之所以cate頁面沒出現是因為它是用的scroll組件,他有滾動條,超出了就滾動條往下走了,所以search組件就可以一直在那裡,但是還需要完善一下
用我們之前cate計算出來的高度減去search組件的高度
然後解決首頁這個問題,將它設置為sticky定位即可
2.2 搜索建議
搜索頁面的基本結構,這裡有用到一個uni的組件有專門的搜索欄search-bar
然後將取消按鈕刪除,去掉一些不必要的事件
要修改背景顏色要去這個組件內部去修改
然後要讓他一進來就獲取焦點也是在內部去改,將兩個都改為true
該組件的input事件會受到參數e也就是輸入的值
很明顯這裡要做一個防抖處理
2.2.1 根據關鍵詞搜索列表
這裡的思路是這樣的,在防抖裡面調用一個獲取搜索列表的函數,在這個函數裡面應該先判斷一下kw也就是輸入的關鍵詞是否是空,如果為空就讓列表為空並退出迴圈否則就正常走,發起請求並給到數組
,
然後渲染到頁面上
同時跳轉到商品詳情頁面
2.3 搜索歷史
先定義好ui結構
來點假數據
然後搜索建議列表和搜索歷史應該條件渲染
2.3.1 搜索歷史列表處理
同樣還是input事件
但是有兩個問題
一個是最新搜索的應該放在前面:
這裡不改變push的用法的前提下,需要用計算節點來做,因為reverse會改變原數組,容易出差錯,而且要淺拷貝一下也是怕把原數組改變到了
還有一個問題就是我們搜重覆的會顯示兩個在上面:
這樣做雖然可以去重操作,但是有一個問題 就是我們如果已經搜索了一個a,在最後面,在搜索一次a,雖然不會上去重覆的,但是這個時候a應該在最前面去這樣做的話這個a還是在最後面
其原因是因為原本結構是這樣
頁面呈現是這樣
這個時候你輸入a,先push進去,然後set發現重覆,就直接刪除了新進來的這個a,相當於沒有變化,所以也不會引起計算屬性reverse的變化,也就導致了你就算搜了一次a他也沒有到最前面來
正確的做法應該這樣
去掉我們原來的push,當我們input之後先創建一個set結構,用她的delete方法刪除原來的,在add添加新的,這樣結構也就變了,就算有重覆的也會被刪去重覆的,而且最重要的是,新搜索的會在前面
持久化存儲搜索建議列表
大體思路是在我們存儲進historyList的時候變成json字元串也保存進storage,用到uni的一個api uni.setStorageSync
然後在onload生命鉤子中去獲取,註意要考慮沒有的情況,就為一個空的字元串數組
2.3.2 清空搜索歷史記錄
綁定事件
需要將列表清空,同時記得移除storage裡面的數據