這次縣市資料要使用這支 API 來實作,未來會延伸成氣象預報的表格。
使用 Bootstrap 標籤
使用 nav
這個功能讓標籤填滿頁面,預設要有六個選項:全部、北部、中部、南部、東部、外島。
所以就先把標籤建置好,
1 | <nav class="nav nav-pills nav-fill"> |
並也改寫 Vue 筆記 - 表格中放入七天日期實作的 table
內容。
1 | <div class="table-responsive"> |
加入縣市欄位
因為要在 table
顯示對應的縣市資料,原本時間是寫在 thead
,現在要顯示在 tbody
中。
1 | <tbody> |
得到畫面如下,並確認這是我要的呈現方式。
使用 Vue.js 改寫
先確認有哪些需求:
- 要顯示台灣的城市。
- 因為要重複顯示,所以要使用迴圈。
- 因為要使用迴圈,所以會用到陣列。
- 要使用陣列把城市存起來。
tbody
改寫,
1 | <tbody v-for="(item,index) in cities" :key="index"> |
新增要使用的變數
- 因為這次要打天氣預報的 API,所以用
weatherItems
變數為空陣列存取取得的資料。 - 建立
cities
的陣列資料為空陣列,之後要把資料存到裡面。 - 建立
area
變數,因為縣市名基本上會變動機會不大,所以用五個陣列分別存好北區、中區、南區、東區、外島等縣市名稱。 range
變數一開始設定為-1
,代表取得全部。active
是標籤目前狀態,點擊後為 true。
1 | data: { |
存取 API 的方法
- 使用 axios 套件取得資料。
- 執行 getData 方法。
1 | getApi() { |
改寫標籤 HTML
把標籤部分加入 :class
與點擊事件
。
1 | <nav class="nav nav-pills nav-fill"> |
取得地區的方法
- 在 HTML 有在方法中給予參數。
- 把 range 變數的值改成參數值,以對應相對的縣市。
1 | getArea(index) { |
取得資料方法
- 時間部份可以參考這篇。
取得城市
- 首先一樣清空
cities
陣列,以確保不會重複傳值。 - 因資料結構較冗長,把取得的資料存在一個
locations
的變數中。 - 另外給予一個
location2
的空陣列,要來存篩選後的結果。 - 判斷如果
range
不是-1
的時候要做哪些事情。- 用
assignArea
變數存area
的陣列要對應range
所選到的值。 location2
存locations
資料篩選後的結果。- 讓
assignArea
的值比對資料中的地區名稱,因為資料陣列是從 0 開始,所以設定>=0
就會確保一定找得到。 - 否則就是全部都顯示。
- 用
- 在把篩選後的結果(
location2
)所迴圈並依序把地區名稱存回cities
的空陣列中。
1 | getData() { |
完整程式碼
HTML
1 | <div id="app"> |
Vue
1 | let vm = new Vue({ |