接上一批,小結(二)。
三、導航內容(含左側導航及頂部面包屑導航)
其實導航條主要根據element-ui的教程進行編寫,官網:http://element-ui.cn/#/zh-CN/component。左側導航為NaveMenu導航菜單,地址:http://element-ui.cn/#/zh-CN/component/menu,頂部為面包屑導航,地址:http://element-ui.cn/#/zh-CN/component/breadcrumb。多掌握組件的寫法吧,簡單上手,但是真的精通還是需要下很多功夫研究的,根據示例寫好后,主要就是改樣式到符合要求的格式。這里可以選擇很多新的CSS預處理器,sass、less還有stylus這幾種,其實主要就是方便編寫CSS樣式,用最基礎的CSS也可。布局可以通過el-col的方式布局,完成后為響應式布局,根據窗口縮放。
左側導航如果完全根據ui組件來做,實際上不難。但是如果不根據ui組件來做,就需要自己采用v-for循環將導航內容全部顯示出來,上面可以定義二級菜單展開關閉及路由跳轉等事件,ui組件其實封裝了這一塊,所以如果導航菜單不是很多的時候建議可以采用ui組件來做的,代碼也顯得清楚易懂些。
面包屑導航,主要是el-breadcrumb-item,里面的內容第一條to表示可以點擊跳轉到該路由,第二條為面包屑導航的后面內容。第二個div中為頂部導航欄右側內容,根據實際需要情況改變,我這里主要是回到首頁和退出登錄兩個事件按鈕,還有一個是歡迎語。
1 <template> 2 <div class="header"> 3 <el-breadcrumb separator="/"> 4 <el-breadcrumb-item :to="{ path: '/main' }">INFO首頁</el-breadcrumb-item> 5 <el-breadcrumb-item v-for="(item, index) in $route.meta" :key="index">{{item}}</el-breadcrumb-item> 6 </el-breadcrumb> 7 <div style="margin-right:20px"> 8 <span>Welcome, {{userName}}!</span> 9 <el-button type="text" @click="home">[回到首頁]</el-button> 10 <el-button type="text" @click="logout">[退出登錄]</el-button> 11 </div> 12 </div> 13 </template>
這里說到路由,路由就是單頁面應用的前面的主網址后面添加的不同名稱的地址即不同的頁面。直接上代碼:

1 import Vue from 'vue' 2 import Router from 'vue-router' 3 Vue.use(Router) 4 5 const login = resolve => require(["@/page/login/login"], resolve); 6 7 const main = resolve => require(["@/page/main/main"], resolve); 8 const home = resolve => require(["@/page/home/home"], resolve); 9 const weather = resolve => require(["@/page/weather/weather"], resolve); 10 const tableOperation = resolve => require(["@/page/tableManager/tableOperation"], resolve); 11 const quillEditor = resolve => require(["@/page/tableManager/quillEditor"], resolve); 12 const starNews = resolve => require(["@/page/allNews/starNews"], resolve); 13 const explain = resolve => require(["@/page/explain/explain"], resolve); 14 15 16 export default new Router({ 17 routes: [ 18 { 19 path: '/', 20 component: login 21 }, 22 { 23 path: '/main', 24 component: main, 25 children: [{ 26 path: '', 27 component: home, 28 meta: [], 29 }, { 30 path: '/weather', 31 component: weather, 32 meta: ['天氣預報', '實時天氣'], 33 }, 34 { 35 path: '/tableOperation', 36 component: tableOperation, 37 meta: ['數據管理', '表格操作'], 38 }, 39 { 40 path: '/quillEditor', 41 component: quillEditor, 42 meta: ['數據管理', '文本編輯'], 43 }, 44 { 45 path: '/starNews', 46 component: starNews, 47 meta: ['新聞資訊', '明星八卦'], 48 }, 49 { 50 path: '/explain', 51 component: explain, 52 meta: ['說明', '說明'], 53 }, 54 55 ] 56 } 57 ] 58 })
要引入並使用vue-router模塊,然后是根據路徑來定義路徑的組件名const main = resolve => require(["@/page/main/main"], resolve),最后在routes里面添加組件名,其中meta為面包屑導航需要的字段,代表了一種層級關系,children為在主視圖下的二級路由視圖,這點其實蠻有用的,路由視圖就是<router-view></router-view>標簽代表的內容。第一個路由視圖在APP.vue里面,代表后面所有的內容,第二個在主文件里再次二次視圖,代表左側導航和頂部導航都不用重新加載。
四、其他。
其實寫了這些有點不知道些什么下去了,過程中遇到的問題肯定是很多,學習是一個痛苦和快樂的過程,查不到解決方法時候的痛苦,做出來之后的喜悅。項目里難度最大的應該屬於表格操作頁了,增刪改查,提交更改上傳文件等等功能都有實現,借助了很多ui組件封裝好的功能,部分也需要自己寫邏輯。最困難的地方就是多條件查詢了吧,實在是琢磨了好久,在網上找了好久,最后是用filter方法進行過濾表格數據完成的,需要弄清楚的是filter方法返回的是參數里值為真的數據,抓住這個重點就好了。

1 search(searchForm) { 2 this.results = this.list.filter(item => { 3 let MatchBusiness = true; 4 let MatchDep = true; 5 let MatchMajor = true; 6 let MatchSystemType = true; 7 let MatchStatus = true; 8 9 if (searchForm.depName) { 10 MatchDep = item.depName == searchForm.depName; 11 } 12 if (searchForm.majorName) { 13 MatchMajor = item.majorName == searchForm.majorName; 14 } 15 if (searchForm.status) { 16 MatchStatus = item.status == searchForm.status; 17 } 18 19 if (searchForm.busiSystem) { 20 // 模糊搜索; 21 let key = searchForm.busiSystem.trim(); 22 MatchBusiness = item.busiSystem.indexOf(key.trim()) != -1; 23 } 24 if (searchForm.systemType) { 25 // 模糊搜索; 26 let key = searchForm.systemType.trim(); 27 MatchSystemType = item.systemType.indexOf(key.trim()) != -1; 28 } 29 return ( 30 MatchBusiness && 31 MatchDep && 32 MatchMajor && 33 MatchSystemType && 34 MatchStatus 35 ); 36 }); 37 },
然后其他增刪改就簡單很多,利用js的push和splice方法完成,splice可刪可改,刪除就是講當前索引下的數據替換為無this.tableData.splice(i, 1),修改則是新的數據替換