2016年12月21日 星期三

angularjs 預覽圖片

一般我們在上傳檔案都是用 file input 上傳,在選擇檔案後通常只會顯示檔名
如果上傳的是圖檔又同時想要預覽選擇的圖片光用 file input 是無法實現的
以下就介紹一個簡便的方法來實現預覽圖片的效果

首先在 body 中加入 input 及 img 欄位







file input 用來選擇要預覽的圖片,img 用顯示被選的圖片
再來在 controller 中加入下列程式












這樣就可以顯示選擇的圖片了,這裡所使用的是 FileReader API 詳細可參考 MDN
reader.readAsDataURL 會返回以 "data:image/jpeg;base64," 開頭的 base64 字串
將此字串放進 img.src 中就可以顯示圖片了是不是很簡單啊 原始碼 Plunker 

執行結果

2016年8月2日 星期二

解決 MySQL CAST INT Return BigINT 的問題

偶然間發現 MySQL 使用 CAST Function 做型別轉換時,若指定輸出為 Integer 則輸出會固定為 BIGINT,如下圖
















神了一下發現是 MySQL 的 Bug, http://bugs.mysql.com/bug.php?id=64084
同時也有高手提供了解決辦法,就是自建一個 Function 做轉換








這個 Function 也沒做什麼事,只是把傳進去的 BIGINT 以 INT32 長度回傳而已
所以結果就會變這樣













會發現這個問題是因為原本的資料庫是 MSSQL,在轉換成 MySQL 後將 Data 轉換到 Model 時發生型別錯誤,才發現原來經過 CAST 的 Number 會輸出為 BIGINT

2016年7月26日 星期二

AngularJs Select Binding

AngularJs 綁定 Select Element 的方法有二種, 一種為使用 ngOptions 另一種為 ngRepeat
使用 ngOptions 的方法如下


nOptions 會自動產生 <option></option> 並綁定 data.availableOptions 的 item
其中 option.name 為選單的 Text, option.id 為 Value
data.selectedOption 則為 data.availableOptions 的一個 item, 也就是當 selected 事件產生時 data.selectedOption = { id: x, name: yyyy }

使用 ngRepeat 的方法如下


ngRepeat 如同一般的用法在 <option> 中加入 ng-repeat Directive , 當 selected 事件產生時 data.model = option.id 而不是整個 data.availableOptions item
若要設定 selected 可以用 ng-selected directive
<option ng-selected="option.id == data.model">

二種用法的差別如下
ngOptions:
1.option element 自動產生
2.ng-model 為 object
3.有使用 track by 條件要注意 track by 值不能重複
4.指定 ng-model 即可 selected option

ngRepeat:
1.手動填入 ng-repeat option.name, option.id 到 Text 及 Value  
2.ng-model 為 value
3.需使用 ng-selected 才能 selected option

官方文件參考 Angular JS API Select

2015年9月1日 星期二

建立 Cordova APP + ionic Framework 開發環境

開發以 Hybrid App 也一陣子了,一開始自然免不了花一陣子時間摸索
在開發過程中自然也碰到不少問題,以後有時間再慢慢把碰到的問題記錄下來
廢話就不多說了回歸正題
開發 Cordova App 所需的環境如下

1、nodejs
首先安裝 nodejs ,可以到 nodejs 官網下載安裝包安裝,安裝包也包含了 Git 套件 App 開發過程中會需要外掛一些 plugin ,這些 plugin 都是從 GitHub 下載安裝的。

2、Java SDK
再來安裝 Java SDK,可以直接到 Oracle 官網下載,下載後執行安裝即可。

3、Android SDK
請到 android developer 下載,可以選擇 android studio 安裝包,裡面就包含了 android SDK ,或是選擇獨立 SDK 安裝

4、Apache ant
請到 apache ant 官網下載格式為 zip 檔,下載後解壓縮到指定的目錄即可

開發所需的工具準備好後還要為 windows 設定預設路徑
1、"控制台"=> "系統" => "進階系統設定" => "進階" => "環境變數" => 新增使用者變數
     ANT_HOME: apache-ant 目錄
     ADT_HOME: android sdk 目錄
     JAVA_HOME : java jdk 目錄



2、修改"系統變數" Path 內容,加入 ;%ANT_HOME%\bin;%ADT_HOME%\tools;%ADT_HOME%\platform-tools;%JAVA_HOME%\bin



以上步驟都做完了就可以開發 接下來要安裝 Cordova, 打開 command mode, 輸入以下指令
C:\npm install -g cordova
Cordova 安裝完成後接著安裝 ionic , 輸入 npm install -g ionic ,
C:\npm install -g ionic
安裝完成就大功告成了接著就可以來開發 app 嘍,建立 ionic app 超簡單,只要輸入以下指令
C:\ionic start appname
 就能建立 app 專案(appname 為 app 專案名稱,請自行命名)
專案建立完成後進入專案目錄,輸入以下指令就可以直接開啟瀏覽器進行預覽及除錯
C:\appname\ionic serve

 若要在模擬器或手機上預覽則要替專案加上執行平臺,在專案目錄下輸入
C:\appname\cordova platform add android

android 平台加入後可以先 build app 輸入
C:\appname\ionic build android

 顯示 BUILD SUCCESSFUL 表示 build app 完成,打包好的 apk 檔會存放在  C:\appname\platforms\android\build\outputs\apk\android-debug.apk 這裡,這個 apk 檔可以直接放到手機安裝執行,另外一些偵錯的方法就以後再介紹囉~

2015年8月11日 星期二

解決 cordova plugin 無法安裝的問題

最近幾天要為開發的 app 安裝 plugin,出現 "Error: EXDEV, cross-device link not permitted" 的錯誤訊息

大神了一下原來是升級到 cordova 5.0.0 到 5.1.1 版本,在 windwos 系統會出現此問題
原文在這 Plugin install via git url error "cross-device link not permitted"

解決方法在這裡 apache / cordova-lib GitHub ,文中提到要修改 plugins.js 這個檔案,這個檔案的位置藏得蠻深的有點不好找 =  =

C:\Users\你的帳號\AppData\Roaming\npm\node_modules\cordova\node_modules\cordova-lib\src\plugman\util\plugins.js

開啟檔案後將 GitHub 中標註紅色的部份刪除,綠色的部份加到檔案中存檔,之後就可以正常安裝 plugin 了

幾句話簡單解釋 AngularJs Service, Provider, Factory

1、Service, Factory, Provider 都是 Signlton 在 angular 初始化時就會將所有Module 載入, 在之後的應用中無論注入幾次都是叫用同一個實例.

2、Service 沒有 return 區塊, 通常以 this.object = {}的方式設定物件, 物件可以是字串、Array、function, angular 注入會以 new class() 方式回傳物件

3、Factory 只會取得 return 區塊的本身, return 區塊以外可另外定義物件但不會被外部取得

4、Provider 以 $.get 回傳物件, 在 provider 裡可以另外設置 function 用來傳入參數, 通常會配合 Service 或 Factory, 在 $.get 中回傳 Service 或 Factory 物件