- Angular 8 教程
- Angular 8 - 首頁
- Angular 8 - 簡介
- Angular 8 - 安裝
- 建立第一個應用程式
- Angular 8 - 架構
- Angular 元件和模板
- Angular 8 - 資料繫結
- Angular 8 - 指令
- Angular 8 - 管道
- Angular 8 - 響應式程式設計
- 服務和依賴注入
- Angular 8 - Http 客戶端程式設計
- Angular 8 - Angular Material
- 路由和導航
- Angular 8 - 動畫
- Angular 8 - 表單
- Angular 8 - 表單驗證
- 身份驗證和授權
- Angular 8 - Web Workers
- Service Workers 和 PWA
- Angular 8 - 伺服器端渲染
- Angular 8 - 國際化 (i18n)
- Angular 8 - 可訪問性
- Angular 8 - CLI 命令
- Angular 8 - 測試
- Angular 8 - Ivy 編譯器
- Angular 8 - 使用 Bazel 構建
- Angular 8 - 向後相容性
- Angular 8 - 工作示例
- Angular 9 - 新特性?
- Angular 8 有用資源
- Angular 8 - 快速指南
- Angular 8 - 有用資源
- Angular 8 - 討論
Angular 8 - 管道
管道被稱為過濾器。它有助於轉換資料並在插值內管理資料,用 {{ | }} 表示。它接受資料、陣列、整數和字串作為輸入,這些輸入用 '|' 符號分隔。本章詳細介紹了管道。
新增引數
在你的 test.component.ts 檔案中建立一個日期方法。
export class TestComponent {
presentDate = new Date();
}
現在,在你的 test.component.html 檔案中新增以下程式碼。
<div>
Today's date :- {{presentDate}}
</div>
現在,執行應用程式,它將顯示以下輸出 -
Today's date :- Mon Jun 15 2020 10:25:05 GMT+0530 (IST)
這裡,
日期物件被轉換為易於閱讀的格式。
新增日期管道
讓我們在上面的 html 檔案中新增日期管道。
<div>
Today's date :- {{presentDate | date }}
</div>
您可以看到以下輸出 -
Today's date :- Jun 15, 2020
日期中的引數
我們可以使用 : 字元在管道中新增引數。我們可以使用此引數顯示短日期、完整日期或格式化日期。在 test.component.html 檔案中新增以下程式碼。
<div>
short date :- {{presentDate | date:'shortDate' }} <br/>
Full date :- {{presentDate | date:'fullDate' }} <br/>
Formatted date:- {{presentDate | date:'M/dd/yyyy'}} <br/>
Hours and minutes:- {{presentDate | date:'h:mm'}}
</div>
您可以在螢幕上看到以下響應 -
short date :- 6/15/20 Full date :- Monday, June 15, 2020 Formatted date:- 6/15/2020 Hours and minutes:- 12:00
鏈式管道
我們可以將多個管道組合在一起。當某個場景與多個必須應用於資料轉換的管道相關聯時,這將非常有用。
在上面的示例中,如果要以大寫字母顯示日期,則可以同時應用 Date 和 Uppercase 管道。
<div>
Date with uppercase :- {{presentDate | date:'fullDate' | uppercase}} <br/>
Date with lowercase :- {{presentDate | date:'medium' | lowercase}} <br/>
</div>
您可以在螢幕上看到以下響應 -
Date with uppercase :- MONDAY, JUNE 15, 2020 Date with lowercase :- jun 15, 2020, 12:00:00 am
這裡,
Date、Uppercase 和 Lowercase 是預定義的管道。讓我們在下一節中瞭解其他型別的內建管道。
內建管道
Angular 8 支援以下內建管道。我們將逐一簡要討論。
AsyncPipe
如果資料以可觀察物件的形式出現,則 Async 管道將訂閱可觀察物件並返回傳輸的值。
import { Observable, Observer } from 'rxjs';
export class TestComponent implements OnInit {
timeChange = new Observable<string>((observer: Observer>string>) => {
setInterval(() => observer.next(new
Date().toString()), 1000);
});
}
這裡,
Async 管道每秒執行一次訂閱以進行時間變化,並在每次傳遞給它時返回結果。主要優點是,我們不需要在我們的 timeChange 上呼叫 subscribe,並且如果元件被移除,也不需要擔心 unsubscribe。
在你的 test.component.html 中新增以下程式碼。
<div>
Seconds changing in Time: {{ timeChange | async }}
</div>
現在,執行應用程式,您可以在螢幕上看到秒數的變化。
CurrencyPipe
它用於將給定的數字轉換為各個國家的貨幣格式。在 test.component.ts 檔案中考慮以下程式碼。
import { Component, OnInit } from '@angular/core'; @Component({
selector: 'app-test',
template: `
<div style="text-align:center">
<h3> Currency Pipe</h3>
<p>{{ price | currency:'EUR':true}}</p>
<p>{{ price | currency:'INR' }}</p>
</div>
`,
styleUrls: ['./test.component.scss']
})
export class TestComponent implements OnInit {
price : number = 20000; ngOnInit() {
}
}
您可以在螢幕上看到以下輸出 -
Currency Pipe €20,000.00 ₹20,000.00
SlicePipe
Slice 管道用於返回陣列的切片。它以索引作為引數。如果您只分配起始索引,則表示它將列印到值的末尾。如果您想列印特定範圍的值,則可以分配起始和結束索引。
我們還可以使用負索引訪問元素。簡單的示例如下所示 -
test.component.ts
import { Component, OnInit } from '@angular/core'; @Component({
selector: 'app-test',
template: `
<div>
<h3>Start index:- {{Fruits | slice:2}}</h3>
<h4>Start and end index:- {{Fruits | slice:1:4}}</h4>
<h5>Negative index:- {{Fruits | slice:-2}}</h5>
<h6>Negative start and end index:- {{Fruits | slice:-4:-2}}</h6>
</div>
`,
styleUrls: ['./test.component.scss']
})
export class TestComponent implements OnInit {
Fruits = ["Apple","Orange","Grapes","Mango","Kiwi","Pomegranate"];
ngOnInit() {
}
}
現在執行您的應用程式,您可以在螢幕上看到以下輸出 -
Start index:- Grapes,Mango,Kiwi,Pomegranate Start and end index:- Orange,Grapes,Mango Negative index:- Kiwi,Pomegranate Negative start and end index:- Grapes,Mango
這裡,
{{Fruits | slice:2}} 表示它從第二個索引值 Grapes 開始到值的末尾。
{{Fruits | slice:1:4}} 表示從 1 開始到 end-1,因此結果是從第一個到第三個索引值。
{{Fruits | slice:-2}} 表示從 -2 開始到末尾,因為沒有指定結束值。因此,結果是 Kiwi、Pomegranate。
{{Fruits | slice:-4:-2}} 表示從負索引 -4 即 Grapes 開始到 end-1,即 -3,因此索引 [-4,-3] 的結果是 Grapes、Mango。
DecimalPipe
它用於格式化十進位制值。它也被認為是 CommonModule。讓我們在 test.component.ts 檔案中瞭解一個簡單的程式碼,
import { Component, OnInit } from '@angular/core'; @Component({
selector: 'app-test',
template: `
<div style="text-align:center">
<h3>Decimal Pipe</h3>
<p> {{decimalNum1 | number}} </p>
<p> {{decimalNum2 | number}} </p>
</div>
`,
styleUrls: ['./test.component.scss']
})
export class TestComponent implements OnInit {
decimalNum1: number = 8.7589623;
decimalNum2: number = 5.43;
ngOnInit() {
}
}
您可以在螢幕上看到以下輸出 -
Decimal Pipe 8.759 5.43
格式化值
我們可以在數字模式內應用字串格式。它基於以下格式 -
number:"{minimumIntegerDigits}.{minimumFractionDigits} - {maximumFractionDigits}"
讓我們在我們的程式碼中應用上述格式,
@Component({
template: `
<div style="text-align:center">
<p> Apply formatting:- {{decimalNum1 | number:'3.1'}} </p>
<p> Apply formatting:- {{decimalNum1 | number:'2.1-4'}} </p>
</div>
`,
})
這裡,
{{decimalNum1 | number:’3.1’}} 表示三位小數,最少一位小數,但對最大小數位數沒有限制。它返回以下輸出 -
Apply formatting:- 008.759
{{decimalNum1 | number:’2.1-4’}} 表示兩位小數,最少一位,最多四位小數,因此它返回以下輸出 -
Apply formatting:- 08.759
PercentPipe
它用於將數字格式化為百分比。格式化字串與 DecimalPipe 概念相同。簡單的示例如下所示 -
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-test',
template: `
<div style="text-align:center">
<h3>Decimal Pipe</h3>
<p> {{decimalNum1 | percent:'2.2'}} </p>
</div>
`,
styleUrls: ['./test.component.scss']
})
export class TestComponent {
decimalNum1: number = 0.8178;
}
您可以在螢幕上看到以下輸出 -
Decimal Pipe 81.78%
JsonPipe
它用於將 JavaScript 物件轉換為 JSON 字串。在 test.component.ts 檔案中新增以下程式碼,如下所示 -
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-test',
template: `
<div style="text-align:center">
<p ngNonBindable>{{ jsonData }}</p> (1)
<p>{{ jsonData }}</p>
<p ngNonBindable>{{ jsonData | json }}</p>
<p>{{ jsonData | json }}</p>
</div>
`,
styleUrls: ['./test.component.scss']
})
export class TestComponent {
jsonData = { id: 'one', name: { username: 'user1' }}
}
現在,執行應用程式,您可以在螢幕上看到以下輸出 -
{{ jsonData }}
(1)
[object Object]
{{ jsonData | json }}
{ "id": "one", "name": { "username": "user1" } }
建立自定義管道
正如我們已經看到的,Angular 8 中有許多預定義的管道可用,但有時我們可能希望以自定義格式轉換值。本節介紹如何建立自定義管道。
使用以下命令建立自定義管道 -
ng g pipe digitcount
執行上述命令後,您可以看到響應 -
CREATE src/app/digitcount.pipe.spec.ts (203 bytes) CREATE src/app/digitcount.pipe.ts (213 bytes) UPDATE src/app/app.module.ts (744 bytes)
讓我們使用管道建立一個計算數字中位數的邏輯。開啟 digitcount.pipe.ts 檔案並新增以下程式碼 -
import { Pipe, PipeTransform } from '@angular/core'; @Pipe({
name: 'digitcount'
})
export class DigitcountPipe implements PipeTransform {
transform(val : number) : number {
return val.toString().length;
}
}
現在,我們添加了計算數字中位數的邏輯。讓我們在 test.component.ts 檔案中新增最終程式碼,如下所示 -
import { Component, OnInit } from '@angular/core'; @Component({
selector: 'app-test',
template: `
<div>
<p> DigitCount Pipe </p>
<h1>{{ digits | digitcount }}</h1>
</div>
`,
styleUrls: ['./test.component.scss']
})
export class TestComponent implements OnInit {
digits : number = 100;
ngOnInit() {
}
}
現在,執行應用程式,您可以看到以下響應 -
DigitCount Pipe 3
工作示例
讓我們在我們的 ExpenseManager 應用程式中使用管道。
開啟命令提示符並轉到專案根資料夾。
cd /go/to/expense-manager
啟動應用程式。
ng serve
開啟 ExpenseEntryListComponent 的模板,src/app/expense-entry-list/expense-entry-list.component.html,並在 entry.spendOn 中包含管道,如下所示 -
<td>{{ entry.spendOn | date: 'short' }}</td>
在這裡,我們使用了日期管道以短格式顯示花費日期。
最後,應用程式的輸出如下所示 -