選單
GSS 技術部落格
在這個園地裡我們將從技術、專案管理、客戶對談面和大家分享我們多年的經驗,希望大家不管是喜歡或是有意見,都可以回饋給我們,讓我們有機會和大家對話並一起成長!
若有任何問題請來信:gss_crm@gss.com.tw
4 分鐘閱讀時間 (750 個字)

Angular #9 - 深入淺出 Angular [1]

shutterstock_198004562
  • Angular 有許多上層的 Entity,大致上分為以下幾類:
    • Modules
      • 拿來分群的一種概念
      • 不見得只有 Component 在內
    • Components
      • 單一職責的元件
      • 會是在 Angular App 中最常碰到的東西
    • Directives
      • 給既有的 HTML 元素帶來新氣象(X)
      • 主要分成兩類,一類可以動態改變結構,另一類是改變行為
    • Pipes
      • 單純來看它就是一個 javascript function
      • 可以透過它將從 backend 取得的資料作進一步的處理(e.g. 格式化),只會影響顯示,不動到 controller 的資料內容(這裡指的是 ooo.component.ts 中成員變數的值)
    • Services
      • 可重覆在多個 Component 或 Service 使用的 module
      • 多半用來取得資料,或是作為 helper(e.g. encode/decode)
  • 我們寫的 App 不外乎就是用到以上幾類 Entity,當然有例外,不過很少就是了
    • 以前面實作的股票範例為例:
      • 從 @angular/core 引用了 pipes/directives
      • 接著在 AppModule 定義用到了哪些 Service/Components/Modules/...等
      • Bootstrap 後從 AppComponent 開始長畫面
      • 透過 Routing 的機制導到了 DashboardComponent 與 ManageComponent
      • DashboardComponent 中透過 NgFor Directive 動態長了很多 SummaryComponent
      • SummaryComponent 又使用 CurrencyPipe 與 PercentPipe 將資料以更好的方式呈現
  • 深入說明
    • Modules
      • Modules 分為兩種:
        • Javascript modules
          • 這個主要是 javascript 在 ES2015 規範中的 module
          • 我們大部份著墨都在這塊(只要有 export 就是在撰寫 module)
        • Angular modules
          • 這個主要是在指 @NgModule
          • 相較之下是一種邏輯上的分組
          • App Module 是每個 Angular app 一定要有的 module
          • 再重溫一下前幾篇用到的 NgModule:
              @NgModule({
                declarations: [
                  AppComponent,
                  SummaryComponent,
                  DashboardComponent,
                  ManageComponent
                ],
                imports: [
                  BrowserModule,
                  AppRoutingModule,
                  HttpClientModule,
                  FormsModule,
                  AppRoutingModule
                ],
                providers: [StocksService],
                bootstrap: [AppComponent]
              })
              export class AppModule { }
            • 撇開該 import 的部份不看的話,NgModule 就是分為 declarations, imports, providers, bootstrap
            • declarations 主要是告訴這個 NgModule,我的 Component/Directive 有哪些
            • imports 主要是匯入其他的模組,有 Angular 本身的,也有自定義的模組(e.g. AppRoutingModule),其他的 module 可以再定義第一點提到的四個 metadata
            • providers 主要是這個 Module 底下的 Component 能使用的 Service 有哪些,並在 bootstrap 時產生 instance
            • bootstrap 是 render 時要優先載入的 Component,大多數情況下只會有一個,當然也有例外,不過以後遇到再談
    • Componenents
      • Component 對於 Angular 的重要性,就好比學一個語言需先認識它的基單字一樣
      • 開發時盡可能符合以下的原則:
        • 封裝(Encapsulation) - 將商業邏輯封裝在此
        • 隔離(Isolation) - 內部實作不該讓外部看到不看的部份
        • 重用性(Reusability) - 可以在多個地方共用
        • 基於事件(Event based)
          • 在 Component 的生命週期中有各種 event,何時該用哪種
          • 可自定義事件,讓父 Component 可以即時應對(以後會再深談)
        • 可自訂(Customizable) - 可以繼承或針對 Component 加上樣式
        • 宣告式(Declarative)
          • 只要簡單的 markup 就可以使用
          • 透過 ng generate 產出來的預設都會有個 app 前贅詞,可以的話就拿掉,讓 component 的 selector 愈單純但又帶足夠意義愈好
  • 小結
    • 深入淺出這幾篇主要都是強化概念用的
      • 前面的 stock app 是實作,如果忘記的可以再回去看看
      • 這篇主要提到了 Module 及 Component 的分類與大概的使用原則
Angular # 10 - 深入淺出 Angular [2]
Angular #8 - 初見 Angular Routing

相關文章

 

評論

尚無評論
已經注冊了? 這裡登入
Guest
2024/05/05, 週日

Captcha 圖像