上方廣告

Lady Kukki 手作糖霜餅乾

2017年7月20日 星期四

[Angular學習紀錄] 網站載入前讀取config設定檔參數

應用程式執行前讀取 config 檔案內的參數,這是常見的開發方式,但若把參數定義在 TypeScript 檔案內,經過編譯後,所撰寫的類別都會被整併到 main.js 檔案內,所以若需要調整 config 參數,就必須要打開 main.js 然後在凌亂的 JavaScript檔案內找到參數,在修改它,這可能不是你樂見的。

理想的狀態應該是,把參數檔案定義在一個不會被編譯的檔案內,Ex. JSON檔,然後要使用的時候再去讀取它,對吧~

當然不對,這也是筆者一開始的思維,但當要讀取 .json 檔案的時候,卻發現必須使用 http 、使用 http 、使用 http 來取得參數,若還沒發現事情的嚴重性,筆者大概說明一下,http是一個非同步回傳的類別,所以若要取得參數,就必須要在等待資料回傳後再繼續進行後續的作業,這樣整個應用程式會變得非常的複雜。

[Angular學習紀錄] 使用外部JavaScript類別庫(jQuery為例)

儘管 Angular 已經提供了很多功能及特效,但有時候直接套用前端版型的時候,還是不免使用到外部的JavaScript檔案,例如,jQuery 就是非常常見的類別庫。

本篇文章就簡單的介紹一下如何在 Angular 當中使用 jQuery,使用 jQuery 檔案的時機點,我們先大致區分成三大塊。

  1. 在index.html檔案當中。
  2. 在typescirpt檔案當中。
  3. 在其它.html檔案當中。


2017年6月21日 星期三

[Angular學習紀錄] Component 套用 ngModel 或 formControlName

開發Angular應用程式的時候,有時候會把一些常用複合式控制元件打包成一個Component控制項,只要將商業邏輯撰寫在該控制項之後,其它開發人員若需要使用到該功能,就可以直接拿來使用了,例如下圖,是一個動態選擇電子郵件的輸入框,當資料輸入後會去檢查電子郵件的資料,並撈回可用的電子郵件。

在開發表單或者使用ngModel雙向繫結的時候,當部分控制項拉出去變成一個Component的時候,若要取得該控制項的資料,直覺的解決辦法就是使用 @Input() 和 @Output 的方式進行資料的傳遞。

但 Angular 本身就有針對 ngModel 在 Component 的資料繫結提供解決辦法,在Component 端實作 ControlValueAccessor,接下來的就來分享一下該怎麼實作該功能。

2017年6月8日 星期四

[Angular學習紀錄] 屬性型指令@Directive()

Angular 的指令共分三種類型 :
  1. 組件(Component) : 也就是模板的指令,這是最常使用到的指令。
  2. 結構型指令(Structural directives) : 用來修改視圖的 "結構",例如添加或移除DOM布局,常用的指令如 NgIf 和 NgFor。
  3. 屬性指令(Attribute directives) : 用來改變視圖元件的 "外觀和行為",例如預設的背景色、滑過改變顏色,常用的指令如 NgStyle。
而 @Directive() 就是 "屬性指令" 的一種,下圖為本文範例的示意圖,先大概說明以下幾個操作情境,底下會有詳細的說明。
  • 設定載入時的預設背景色。
  • 設定滑鼠滑過的背景設,當滑鼠離開後恢復預設背景色。
  • 設定滑鼠點擊的背景設,當Click事件發生時變成指定背景色。


2017年6月3日 星期六

[Angular學習紀錄] 路由機制

SPA(Single Page Application)的開發方式就是指透過一個 html 檔案來達成整個網站系統的任何操作,從頭到尾都不會離開此頁面,例如 Web Gmail 就是一個典型的 SPA 設計,回過頭來看一下 Angular 的基礎示範教學中也是使用 SPA 的方式,並透過屬性的判斷來決定使否載入某個 Template。

小型應用程式只有少數幾個頁面,使用此方式到還好,但假想一下有一個中大型應用程式有數十甚至數百個頁面需要切換,如果再像小型應用程式一樣透過屬性判斷的方式,後續整個程式碼可能會出現難以維護的情況,因此這種時候就需要運用 Angular 所提供的路由機制來處理此類的問題了。

什麼是路由? 簡單來說就是 Angular 會根據瀏覽器中的 URL,自動對應到要載入的視圖,這跟其它開發語言的路由,如 ASP.NET MVC 的概念是差不多的,差別在 Angular 透過路由機制來完成單一個網頁檔案切換視圖(SPA)的效果。

Angular 路由器是一個可選擇的外部 Angular NgModule,名叫RouterModule。 路由器包含了多種服務(RouterModule)、多種指令(RouterOutlet、RouterLink、RouterLinkActive)、 和一套配置(Routes),本文將說明如何建立 Angular 路由設定。

2017年6月2日 星期五

[Angular學習紀錄] @ViewChild 和 @ContentChild

在前面的學習過程中,理解了Angular的Layout布局方式可以像是ASP.NET的MasterPage方式來規劃好UI的布局,使用的是Template內嵌另外一個子Template,如下圖紅框處就是一個Child的Template,也學習到 Parent & Child Template 之間資料的傳遞方式(參考先前文章)。


今天又再次接觸到幾個新的裝飾器 @ViewChild & @ContentChild,在開始說明之前,需要先理解<ng-content>這個嵌入標籤。

先回到UI布局的部分,如果想要在一個 Parent 下方放置另外一個 Child Template,最簡單的使用方式就是直接在要顯示的地方加上類似上圖的操作方法。

從上面的範例來看,該標籤的InnerHtml是空白的,因此就大膽的假設有機會把資料寫在InnerHtml的部分,讓HTML標籤可以從 Parent Template 傳入Child Template當中,但經過實際測試的結果(如下圖),果然失敗了。


實際上Angular是允許讓HTML標籤由Parent Template傳入Child Template,ng-content就是要用來處理此問題的。

2017年6月1日 星期四

[Angular學習紀錄] @Input() or @Output()

Angular可以透過在HTML標籤內使用DOM的Property綁定的方式將資料由Component端傳送到Template端(又或者反向綁定、雙向綁定)。

但該方式指的都是同一個Template,若假設有一種情境為,一個父親的Template必須要將值傳送到兒子Template,並且兒子Template內處理完某些事件必須要將資料傳送回父親Template的情境時,該如何進行?

PS. 有點類似早期的showModalDialog在兩個父子視窗傳值的概念,只是在此Single Page Application(SPA)的情境中不是兩個不同的頁面,因此使用方式也有所不同。

2017年5月31日 星期三

[Angular學習紀錄] Template binding property or attribute?

Attribute 和 Property 這兩個英文單字翻譯成中文都稱作 "屬性"。

而且也應該知道Angular可以透過 "屬性" 的綁定,讓Component和Html Template之間可以進行溝通,但常常有時候會發生一些特例,因而讓應用程式無法正常的運作。

舉個簡單的例子,表格欄位物件 td 內有一個合併儲存格 colspan 的屬性,它是一個可用的屬性(Html Attribute),但是實際將該屬性綁定後卻出現錯誤,為何會發生這種錯誤?


2017年5月23日 星期二

2017年2月24日 星期五

C# 類別屬性複製

近來調整一個Linq to SQL的專案,但由於跟它不是非常熟的狀況下,發生了修改資料後資料庫並無任何反應的情況,實際使用SQL Profiler,發現並沒有執行Update的相關語法。

Google了一下關於Linq to SQL的修改的相關文章看到了這樣的說明【The table could not be updated properly because it had no primary key. (Actually it had the column but the constraint was not copied when I did a SELECT INTO my dev table). The DataContext class requires a primary key for updates.】,但這個並不是這次問題發生的原因。