聽,知天下,明事理
前言
由於熱衷於邊聽有聲小說邊擼程式碼,所以我乾脆自摸出了一個喜馬拉雅App,邊聽電臺邊完成電臺功能的感覺有一絲絲觸動,這個專案完成僅僅30%,功能仍在實現,往後的需求我再一一新增,客官們,不要急,莫催.... 八月初完成大部分功能
主要技術點:vue、vue-router、axios
專案結構
- 主體結構
- 資料流通 第一種方案是為了以後解決跨域和耦合問題引入,由於資料儲存本地:這裡採用第二種方案,使用axios獲取資料投放到主要路由,同時向外引出$http變數
import axios from 'axios'
import Vue from 'vue';
axios.create({
timeout:3000, // 超時控制
baseURL: "http://localhost:8080/" //本地路徑
});
axios.interceptors.response.use(response => {
return response.data
}, err => {
if (err && err.response) {
switch (err.response.status) {... // 這裡是一些選擇case語句...
}
} else {
err.message = "連線到伺服器失敗"
}
message.err(err.message)
return Promise.resolve(err.response)
})
Vue.prototype.$http = axios
複製程式碼
- 路由巢狀
由這裡我要鄭重提問一下,當swiper-item是一個很大的頁面元件時,你們覺得有必要為每個swiper-item設定路由麼??
由於喜馬拉雅是一個大型App,目測是一個一級路由的專案,但是為了以後的維護,我仍然使用二級路由,初步路由,很多引數未帶.... 唉
const routes = [
{
path: '/',
component: Home
},
{
path: '/Home',
component: Home,
children: [
{
path: '/Home/classify',
component: classify
},
{
path: '/Home/recommend',
component: recommend
},
{
path: '/Home/member',
component: member
},
{
path: '/Home/directSeeding',
component: directSeeding
},
{
path: '/Home/radio',
component: Radio
}
]
},
{
path: '/listen',
component: Listen
},
{
path: '/find',
component: find
},
{
path: '/personal',
component: personal
}
]
複製程式碼
bug解析
任何程式碼都會遇到bug,沒有你想不到的bug,只有你敲不出的程式。遲早有一天,我會寫出一個報錯彈出道歉的編譯器,從此世間無bug...
咳~,扯遠了,迴歸現實。下面是我現階段所遇到的bug和一些容易忽略的問題,在這裡一一解說:
- swiper無法滑動問題:
這是一個很古老很low的問題,當然也是要提的嘛,解決的方案記住三點就行:
- 包含關係:.selfClass > .swiper-wrapper > .swiper-item (.swiper-wrapper和.swiper-item 一定不能寫錯)
- .selfClass 必須有一個固定值(如果橫向滑動,則width一定固定,如果縱向滑動,則height一定不動)(如果DOM樹發生變化,記住,增加observer:true,observeParents:true})
- 時機很關鍵:new swiper()會掃描swiper-wrapper內部swiper-slide的個數和自身的長寬樣式,所以你需要DOM結構初始化後才能使用,vue 一般在鉤子函式ready()或者之後初始化,react一般在render或者之後初始化...
- better-scroll無法滑動問題
- 跟上面一樣一樣的,元件必須包含一個子元素才能滑動... 類似
中間人
的感覺
- 跟上面一樣一樣的,元件必須包含一個子元素才能滑動... 類似
- 元件劃分問題
這也是工作中常用到的問題,究竟一個頁面中的一個區塊如何劃分才能儘可能的複用、易於維護理解、合理搭配,這是你實現這個元件的第一步,亦或者最重要的一步。我就遇到過,一個模組:我分成三塊元件,然後實現,然後過了倆天,又遇到了用一個類似的元件,但是有三個不同,這時候想到使用slot,可是如果我還遇到了類似的情況,那我的slot不是要佔據一堆位置了麼?? 好好的一個元件為什麼需要插入那麼多slot,我以後怎麼除錯??這複用同一個元件我還要增加一大堆slot判斷,累死人嘞,還不如重新寫一個元件,唉....- 一定要有全域性觀,這個模組的元件到底該不該拆、到底怎麼拆、拆完後資料傳遞是不是很複雜、值不值的拆、如何正確使用slot....這要從全域性考慮,這個元件哪些地方使用到了,各有不同、針對不同點使用元件還是插槽
- 感覺: 或許這樣說不是很嚴肅,但是這真的很重要,這需要很長時間的練習,習慣養成。沒法直觀表達
- img標籤如果不寫src或者不賦值,會顯示一些莫名其妙的樣式和效果,
- 原因未知... 所以,記住,為了防止圖片載入不出來,最好快取一張預設圖片或者iconfont來預存位置,當然,增加alt優化seo也可以嘛,這使你看起來更加細心
- tempalte巢狀tempalte,增加key報錯
- 巢狀使用template,因為template是不會被渲染的(類似小程式block),所以我們通常使用它用於迴圈或者判斷,但是你迴圈template時,若增加一個key,系統會爆出一個完全看不懂的錯誤..., so,別使用key繫結template,當然,也沒有理由做這種事...
- vue中data() {return {hello: null/undefined}} 這種初始化最好別使用
- 無論這個資料最終是什麼型別,都不要使用null、undefined來初始化。我使用了大量的null用於初始化資料(經常寫es5的老毛病了),結果到最後,傳遞給子元件列印時都會顯示null並報錯,但是頁面顯示效果卻正常輸出資料....這是我無法理解的bug,最後,我初始化{},不會報錯,正常輸出....你們知道這是為什麼??
- 元件之間傳遞方法最好使用統一介面:EventBus
- 如果是小型專案,這個可以忽略
- 大型專案,元件之間父子聯絡,資料狀態隨時更新改變,如果採用單一的父子通訊,到最後,除錯修改非常非常難,牽一而動全身,簡直了...
- 優點: 簡化應用元件間的通訊;解耦事件的傳送者和接收者;避免複雜和容易出錯的依賴和生命週期的問題
- 路由必須要配置跟路由 "/" 重定向後,才能顯示頁面,不然什麼都不會顯示..... 賊尷尬的bug..
結語
感謝每一個觀看的路客,不求點贊,不求打賞,只希望您能得到一點點收穫,謝謝...
最後:原始碼再此,拿走不謝