github Source code
Angular Interceptor 使用案例二:搭配 Jason Web Token + Session Storage 來實現使用者身份驗證功能 使用者驗證在所有的應用程式中都是很重要的一個環節。本篇筆記中將使用 Angular Interceptor + Jason Web Token 以及 Session Storage 來實現這個重點功能。
本篇這個“前端登入功能”所搭配的後端程式可詳見 “使用 .NET 6.0 進行 JWT 身份驗證的 ASP.NET Web Api”
執行步驟如下:
取得預備的程式碼 建立 appSettings 來存放程式參數值 建立 auth.service.ts 建立 token-storage.service.ts 完成 login page component 中的程式碼 執行測試 建立 interceptor 程式 建立 Guard 程式 取得預備的程式碼 在 “使用 Angular Material 建立一個簡易的 Admin Template II” 已經使用 Material UI Component 設計好登入畫面,接下來就直接捉取這個版本的程式碼來接續完成使用者登入功能的所有程式。...
github Source code
除非你和我一樣是個‘老傢伙’,使用過 Angular ver 4.3 以前的版本,否則你一定會遇到它 - interceptor(攔截器)。接下來將用幾篇筆記把各種使用 interceptor 情境的範例給記錄下來。
Angular Interceptor 可以用來作什麼用途呢
修改 HTTP Headers 修改 HTTP request body 設定 authentication/authorization token (身份認證) 模擬 backend api 修改 HTTP response 處理 HTTP 錯誤 (HTTP Error Handlin) 顯示 Loading Spinner 格式化 JSON Responses 日誌記錄 首先先來看看如何使用 Interceptor 來完成一個當你在讀取後端資料時可在畫面上顯示一個“正在讀取中…“的動畫效果,這可以讓使用者有良好的使用體驗。
筆記最後要達的效果是,在按下“取得資料”按鈕時,由程式向後端 API 讀取資料,而在讀取完成前,畫面中的所有 UI (如:按鈕)都是呈現無作用的狀況,直到資料回傳完畢。同時如果“向後端 API 讀取資料”的作業時間小於一秒鐘,則不顯示 “讀取中…" 這個動畫效果。
建立 Angular 專案架構 使用 npm init @angular 語法來建立 Angular project
1 2 3 $ npm init @angular loadingSpin -- --routing --style=scss $ cd loadingSpin $ code ....
Angular中的 constructor 與 ngOnInit 在本篇筆記中來紀錄一下 Angular中的 constructor 與 ngOnInit 有何不同的使用情境,也探討一下 ngOnInit() 的非必要性。
ngOnInit 與 constructor ngOnInit() 與 Class 中的其他 Method 無異,僅因為它剛好被命名為 ngOnInit,常會被與 constructor 搞混用途。其實它並非是必要的,完全取決於你。當 Angular 編譯器進行程式編譯時會將是否 Class 中有實現 ngOnInit() 的方法記錄在特定的 Flag 中,這個 Flag 會在 “變更檢測"時決定是不是要呼叫 ngOnInit() 這個方法。
而 constructor 則完全是另外的一件事,不管你有沒有在類別中實現它,在建立類別實例時它都會被呼叫到。
Angular啟動時的二個主要階段:
建構元件樹(component tree) 執行變更檢測(change detection) constructor 是在第一個階段被呼叫的,這就是為什麼我們不能將任何依賴於 DOM、元素、輸入數據、綁定等的初始化邏輯放在constructor— 因為它們尚不可使用。 而 ngOnInit 則在第二階段,實際上所有的生命週期鉤子都是“變更檢測”階段的一部份。
當 Angular 開始變更檢測時,組件樹已被構建,樹中所有組件的構造函數都被調用。它已經完成了組件 DOM 的創建,通過構造函數注入了所有必需的依賴項並處理了輸入綁定。每個組件的模板節點都被添加到 DOM 中。 也可以取得初始化組件可能需要的所有資料,如:DI Provider、DOM 和輸入綁定(input bindings)。
在實際的使用案例上 constructor 最常被使用的是用來“注入依賴項目”(當然不僅限於此)
ngOnInit 是否為必須 在之前使用 angular cli(如:14....
github Source code
本文主要的主題是要呈現如何完成具有 “新增、修改、刪除、查詢“ Todo List 功能的 Angular Application。同時搭配使用者角色/權限控管來呈現不同 UI 功能。
在最後的章節會介紹到如何使用 Angular Directive 來簡化程式避免程式碼重覆。
為完整性考量,還是記錄如何一步步從無到有使用 Angular 14 相關功能來建立一個使用者資料註冊、登入的表單功能(連結到後端 node+MySQL Web API ),在這些表單中按下送出時會自動檢核使用者所輸入的資料是否合乎程式中所設定的檢核邏輯,並顯示合適的訊息反應給使用者。其中將會使用到下列技術:
Angular CLI 14 Bootstrap 5 (UI Framework) Angular Reactive Form Custome Validator Interceptor JWT Session Storage Router Services Guard & Router Data RxJs Custome Directive 註1: 若你已經查閱過 使用 Angular 14 建立 Reactive Form 表單驗證範例 這篇筆記了,那可以直接跳到 “完成 Todo 相關 Component 的功能” 這個章節。...