iT邦幫忙

2024 iThome 鐵人賽

DAY 9
0
Modern Web

用 Angular Material 開發應用程式系列 第 9

Day 9 - 手風琴與清單 (List)

  • 分享至 

  • xImage
  •  

Expansion Panel

在 Angular Material 中可以利用 Expansion Panel 來實作手風琴的功能,在引用 MatExpansionModule 模組後,就可以使用 <mat-accordion> 標籤來定義手風琴範圍。

<mat-accordion displayMode="flat" hideToggle="true" multi="true">
</mat-accordion>

如上面程式,在 <mat-accordion> 標籤中可以設定 displayMode 來設定手風琴是以預設 (default) 或是平坦 (flat) 呈現。hideToggle 則是用來設定是否隱藏開合的圖示;若希望手風琴可以打開多個頁面則可以設定 multi 屬性。

https://ithelp.ithome.com.tw/upload/images/20240923/20109645hD9K2vmNLt.png

接著,就可以在 <mat-accordion> 標籤下利用 <mat-expansion-panel> 標籤定義手風琴各頁面區塊,而 <mat-expansion-panel-header> 則用來定義頁面的標題文字,包含主標題 <mat-panel-title> 與描述文字 <mat-panel-description> 兩部分。

如同 <mat-accordion> 標籤,我們也可以在 <mat-expansion-panel>hideToggle 來隱藏特定頁面的圖示,或是 togglePosition 屬性來設定圖示放的位置。

<mat-expansion-panel expanded="true">
  <mat-expansion-panel-header>
    <mat-panel-title>未完成事項</mat-panel-title>
  </mat-expansion-panel-header>
</mat-expansion-panel>
<mat-expansion-panel>
  <mat-expansion-panel-header>
    <mat-panel-title>已完成事項</mat-panel-title>
  </mat-expansion-panel-header>
</mat-expansion-panel>

而在 <mat-expansion-panel-header> 中可以利用 collapsedHeightexpandedHeight 來設定開合的高度。此設定與 hideToggle 也可以實作 MatExpansionPanelDefaultOptions 介面的類別,並抽換 MAT_EXPANSION_PANEL_DEFAULT_OPTIONS 令牌,就可以定義整個應用程式的設定。

當我們利用手風琴來實作一有順序的操作時,就可以透過 <mat-action-row> 來在各頁面加入上下頁按鈕的區域。

最後,針對各手風琴頁面的內容,可以在 <ng-template> 使用 matExpansionPanelContent 指令元件,來實作只有在頁面被開啟時才被初始化。

<ng-template matExpansionPanelContent></ng-template>

List

MatList 可以用來實作清單或是可選擇清單的介面,此元件放置在 MatListModule 模組下。我們可以透過 <mat-list><mat-list-item> 標籤來顯示今日的工作清單,而在每一個清單項目中,進一步也可以利用 matListItemTitlematListItemLinematListItemMeta來定義標題與內容列的顯示樣式,或使用 matListItemIconmatListItemIcon 來顯示項目前後的圖示。

@for (proj of todo; track $index) {
  <div subheader>{{ proj.projectName }}</div>
  <mat-list role="list">
    @for (task of proj.tasks; track $index) {
    <mat-list-item>
      <div matListItemTitle>{{ task.subject }}</div>
      <div matListItemLine>{{ task.content }}</div>
      <div matListItemMeta>{{ task.tags }}</div>
    </mat-list-item>
    }
  </mat-list>
}

另外,如上面程式,若希望可以有不同區塊的區分時,可以搭配著 subheader 來定義此區塊的標題。

https://ithelp.ithome.com.tw/upload/images/20240923/20109645tWUBQ9jh9W.png

今日範例

接下來

我們待辦事項的主頁大致完成了,接下來會利用 Angular Material 的彈跳視窗來實作工作事項的明細資訊。


上一篇
Day 8 - Table 的收合
下一篇
Day 10 - 彈跳視窗
系列文
用 Angular Material 開發應用程式30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言