![]() |
圖1.各種資料來源可透過factory進行管理 |
Factory基本格式
Ionic/AngularJS模組都可建立factory,做為資料層,基本格式如下:angular.module('starter',['ionic]) .factory('serviceName',function(){ return {} } )
從語法上看,Factory是一回傳物件的函式。建好factory之後,在controllers中可用"serviceName"存取factory的資料與功能。底下factory範例是一個攝氏華式度數轉換的service:
此例建立名為"TempService"的factory,並提供ctof(degree), ftoc(degree)兩個函式服務,只要給予度數參數即可進行轉換。
重構天氣app線上版
此次範例以天氣概況頁面為基礎,改用下拉選單在單一頁面模式下運作:index.html檔案內如下:
- 第23-24行:分別加入js/controllers.js 與 js/services.js。
- 第33-43行:加入下拉選單(亦可參考Hybrid Apps開發系列之3.1:下拉選單)。ng-model指定使用資料模型變數myCity儲存下拉選單各選項的數值(value);選項選取狀態改變,則呼叫controller端定義的事件處理器changeCity()。最後下拉選單選項文字與數值,則從citys資料模型變數而來。如參照controllers.js的內容,則會發現citys的內容則是由Factory所提供。
- 第46行:city資料模型變數內容亦是由factory提供,由於city是陣列,此處則取第一個資料呈現。詳細說明請參考controllers.js段落。
- 其餘可參考Hybrid Apps開發系列之4.4:多頁面App程式 (天氣app-非線上版)
js/services.js檔案如下:
- 第2行:建立TempService服務。$http提供連線取得資料功能,$filter則用於陣列搜尋
- 第5-11行:陣列資料放在service端,透過後續定義的函式,便可供controller取用。
- 第13-18行:分別建立兩個服務函式ctof 與ftoc。
- 第19-22行:取得特定城市的天氣資料,city參數便是傳遞進來的城市名稱。對照controllers.js便知城市名稱是由下拉選單改變選擇項目時傳送過來的。
- 第23-25行:建立資料模型變數citys,其值就是第5-11行宣告的陣列。
- 第26-28行:提供取得城市英文名稱的服務功能。
- 第29-32行:提供取得城市中文名稱的服務功能。此處使用了陣列的.filter(),該函式可過濾出符合條件的陣列元素,此處是搜尋陣列元素中欄位q與傳送進來資料相符的元素。
- 第2行:由於使用到網路連線與自訂服務TempService兩個服務,所以必須inject此兩個模組。
- 第3,5行:使用自訂服務TempService,取得程式資料,以及讓頁面可以使用TempService。
- 第6-14行:呼叫TempService的get(item)功能,取得特定城市的天氣概況。
沒有留言:
張貼留言