以前只用過Vue作後臺管理系統,一直想本身設計一個手機端的網站,看到Cnode社區有開源Api,就火燒眉毛想作一個了。css
準備材料:vue
1. UI框架:mint-ui 餓了麼UI的手機版本,寫css太煩,直接上框架。node
2. 手機適配方案: 阿里的高清適配方案,屏幕越大顯示越多,解決了1px問題。jquery
1 <script>!function(e){function t(a){if(i[a])return i[a].exports;var n=i[a]={exports:{},id:a,loaded:!1};return e[a].call(n.exports,n,n.exports,t),n.loaded=!0,n.exports}var i={};return t.m=e,t.c=i,t.p="",t(0)}([function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=window;t["default"]=i.flex=function(e,t){var a=e||100,n=t||1,r=i.document,o=navigator.userAgent,d=o.match(/Android[\S\s]+AppleWebkit\/(\d{3})/i),l=o.match(/U3\/((\d+|\.){5,})/i),c=l&&parseInt(l[1].split(".").join(""),10)>=80,p=navigator.appVersion.match(/(iphone|ipad|ipod)/gi),s=i.devicePixelRatio||1;p||d&&d[1]>534||c||(s=1);var u=1/s,m=r.querySelector('meta[name="viewport"]');m||(m=r.createElement("meta"),m.setAttribute("name","viewport"),r.head.appendChild(m)),m.setAttribute("content","width=device-width,user-scalable=no,initial-scale="+u+",maximum-scale="+u+",minimum-scale="+u),r.documentElement.style.fontSize=a/2*s*n+"px"},e.exports=t["default"]}]); flex(100, 1);</script>
3. Api: Cnode的開源接口ios
遇到的坑:git
1. UI風格很差看:朋友評論mint ui風格就像是「收破爛的」,我的也不太喜歡色調,因此最終不用mint,css純手寫,而後色調用mertial ui的cyan500,簡約風格撲面而來。github
2. 以前由於後臺管理帶Element ui庫,因此導航欄變色時自動設置的。如今須要手動設置,因此用hash模式,改動一下路由設置就行。axios
挖過的坑:api
1. input標籤經常使用語句:聚焦@ocus="inputFocus(true)" 失焦@blur="inputFocus(false)"。行爲的縮寫用「@」。瀏覽器
2. class設置樣式::class="{active:變量}"。屬性的縮寫用":"。
3. component屬性: <alert-box :isShow=「輸入變量」></alert-box>,屬性不要使用單括號,不然值會變成對象
4.圖片src:<img :src="變量"/>,按鈕禁止<button :disabled="變量"></button>
5.vue-resource請求:
1 this.$http.get(API.api.getTopics, { 2 params: { 3 } 4 }).then((res) => { 5 // 響應成功回調 6 }, (res) => { 7 // 響應錯誤回調 8 });
建議使用axios插件對網絡請求進行封裝,容易理解且不用處處寫api對象:
//登陸 export const login = params => { return axios.post(`${base}/ologin/login`, params).then(res => res.data); };
6. 加載過的帖子列表和滾動位置用sessionStorage保存起來(要用JSON方法處理),能夠獲得APP通常的切換效果(由於沒有使用VUEX那樣的狀態管理把數據和狀態保存起來,因此須要用sessionStorage來實現相同效果,後續會增長VUEX的)。注意滾動使用函數 $(window).scrollTop(scrollTop) 是jquery方法,在VUE的mounted階段仍然沒法操做dom節點,因此須要放在$(function(){...})方法裏面,等待jquery準備完成。
scroll事件觸發頻率極高,這樣高頻存取數據會形成瀏覽器卡頓,因此須要用定時器作函數節流。注意頁面切換時scrollTop會變成0,因此存儲時要判斷不是0再存。即便這樣仍是到一段時間會出現寫入失敗的狀況,估計是數據量太大並且頻率過高。
7.顯示 v-show="setting.step==2"。非選擇型表達式不須要單括號。
8.父組件傳遞圖片到子組件::img="require('本地路徑)",其中img是屬性。
9.翻頁動畫的製做依然須要依賴jQuery,經過複製元素後,把元素移出屏幕來達到效果。注意動畫要用transform,不然很是不流暢。
10.[Vue warn]: Do not use built-in or reserved HTML elements as component id: header : 引發這樣的錯誤,是由於使用了「header、nav、h1」等h5標籤做爲類名或者id名,不要使用就行。