- Angular 教程
- Angular - 首頁
- Angular - 概述
- Angular - 特性
- Angular - 優點與缺點
- Angular 基礎
- Angular - 環境搭建
- Angular - 第一個應用
- Angular - MVC 架構
- Angular 元件
- Angular - 元件
- Angular - 元件生命週期
- Angular - 檢視封裝
- Angular - 元件互動
- Angular - 元件樣式
- Angular - 巢狀元件
- Angular - 內容投影
- Angular - 動態元件
- Angular - 元素
- Angular 模板
- Angular - 模板
- Angular - 文字插值
- Angular - 模板語句
- Angular - 模板中的變數
- Angular - SVG 作為模板
- Angular 繫結
- Angular - 繫結及其型別
- Angular - 資料繫結
- Angular - 事件繫結
- Angular - 屬性繫結
- Angular - 屬性繫結
- Angular - 類和樣式繫結
- Angular 指令
- Angular - 指令
- Angular - 內建指令
- Angular 管道
- Angular - 管道
- Angular - 使用管道轉換資料
- Angular 依賴注入
- Angular - 依賴注入
- Angular HTTP 客戶端程式設計
- Angular - 服務
- Angular - HTTP 客戶端
- Angular - 請求
- Angular - 響應
- Angular - 獲取
- Angular - PUT
- Angular - DELETE
- Angular - JSON-P
- Angular - 使用 HTTP 進行 CRUD 操作
- Angular 路由
- Angular - 路由
- Angular - 導航
- Angular - Angular Material
- Angular 動畫
- Angular - 動畫
- Angular 表單
- Angular - 表單
- Angular - 表單驗證
- Angular Service Workers & PWA
- Angular - Service Workers & PWA
- Angular 測試
- Angular - 測試概述
- Angular NgModules
- Angular - 模組簡介
- Angular 高階
- Angular - 身份驗證和授權
- Angular - 國際化
- Angular - 可訪問性
- Angular - Web Workers
- Angular - 伺服器端渲染
- Angular - Ivy 編譯器
- Angular - 使用 Bazel 構建
- Angular - 向後相容性
- Angular - 響應式程式設計
- Angular - 指令和元件之間共享資料
- Angular 工具
- Angular - CLI
- Angular 其他
- Angular - 第三方控制元件
- Angular - 配置
- Angular - 顯示資料
- Angular - 裝飾器和元資料
- Angular - 基本示例
- Angular - 錯誤處理
- Angular - 測試和構建專案
- Angular - 生命週期鉤子
- Angular - 使用者輸入
- Angular - 有什麼新變化?
- Angular 有用資源
- Angular - 快速指南
- Angular - 有用資源
- Angular - 討論
Angular - 內建指令
Angular 提供了許多內建指令。內建指令可以分為兩種型別:
- 屬性指令
- 結構指令
一些重要的指令如下:
- NgModel
- NgClass
- NgStyle
- NgNonBindable
- NgIf
- NgFor
- NgSwitch、NgSwitchCase 和 NgSwitchDefault
讓我們在本節學習如何使用內建指令。
NgModel
NgModel 用於為 HTML 表單元素啟用雙向資料繫結。它基於屬性和事件繫結。它由一個單獨的模組 FormsModule 提供。一個簡單的示例,用於對具有 name 屬性的使用者物件進行雙向繫結,如下所示:
<input type="text" [(ngModel)]="user.name" />
每當使用者更改輸入欄位時,更新的使用者姓名將反映到元件中的 user.name 變數。類似地,如果元件的變數 user.name 發生更改,輸入欄位的值也將更新。
讓我們建立一個簡單的登錄檔單來理解 NgModel 指令。我們的登錄檔單將有三個輸入欄位,如下所示,以及一個提交登錄檔單的按鈕。
- 使用者名稱
- 密碼
- 確認密碼
步驟 1:使用 angular CLI 建立一個新的應用程式 my-app,如下所示:
ng new my-app
步驟 2:使用 angular CLI 建立一個新的登錄檔單元件 RegisterForm,如下所示:
ng generate component RegisterForm
步驟 3:開啟登錄檔單元件的模板,並建立一個包含使用者名稱、密碼和確認密碼的使用者。
<div>
<form method="post">
<div class="container">
<label for="username"><b>Username</b></label>
<input type="text" name="username" required>
<label for="password"><b>Password</b></label>
<input type="password" name="password" required>
<label for="confirm_password"><b>Confirm Password</b></label>
<input type="password" name="confirm_password" required>
<button type="submit">Register</button>
</div>
</form>
</div>
步驟 4:開啟登錄檔單元件的樣式,並使用 CSS 樣式化表單,如下所示:
.container {
padding: 15px;
}
input[type=text], input[type=password] {
width: 100%;
padding: 10px 20px;
margin: 10px 0;
display: inline-block;
border: 1px solid #ccc;
box-sizing: border-box;
}
button {
background-color: blue;
color: white;
padding: 15px 20px;
margin: 10px 0;
border: none;
cursor: pointer;
width: 100%;
}
步驟 5:將我們的登錄檔單元件包含在應用程式模板檔案 app.component.html 中。
<app-register-form />
步驟 6:執行應用程式並測試登錄檔單。
步驟 7:接下來,在應用程式模組檔案 app.module.ts 中匯入 FormsModule。
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { FormsModule } from '@angular/forms'
import { AppComponent } from './app.component';
import { RegisterFormComponent } from './register-form/register-form.component';
@NgModule({
declarations: [
AppComponent,
RegisterFormComponent
],
imports: [
BrowserModule,
FormsModule
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
步驟 8:接下來,讓我們新增一個物件 user,它具有 Username、password 和 confirmPassword 屬性。user 物件最初將為空字串。一旦使用者輸入資料,它將透過 NgModel 指令填充。
user: any = {
username: '',
password: '',
confirmPassword: ''
}
步驟 9:將上述宣告的元件成員變數分配給使用者名稱、密碼和確認密碼輸入的 NgModel 指令,如下所示:
<input type="text" name="username" [(ngModel)]="user.username" required> <input type="password" name="password" [(ngModel)]="user.password" required> <input type="password" name="confirm_password" [(ngModel)]="user.confirmPassword" required>
這裡,
ngModel 將值從 user 物件設定為 HTML 輸入元素。它也反向將使用者輸入的值設定到 user 物件。
步驟 10:在元件類中建立一個新的成員方法 showInfo。該方法的目的是收集當前使用者資訊並透過 alert() 方法顯示它。
showInfo(e: Event) {
e.preventDefault();
let info: string = '';
info += 'Username = ' + this.user.username;
info += '\nPassword = ' + this.user.password;
info += '\nConfirm password = ' + this.user.confirmPassword;
alert(info)
}
這裡,
事件物件的 preventDefault() 方法將阻止提交按鈕的預設操作。
alert() 方法將向用戶顯示訊息。
步驟 11:使用事件繫結將 showInfo 方法分配給按鈕的點選事件。
<button type="submit" (click)="showInfo($event)">Register</button>
步驟 12:元件的完整列表如下:
import { Component } from '@angular/core';
@Component({
selector: 'app-register-form',
templateUrl: './register-form.component.html',
styleUrls: ['./register-form.component.css']
})
export class RegisterFormComponent {
user: any = {
username: '',
password: '',
confirmPassword: ''
}
showInfo(e: Event) {
e.preventDefault();
let info: string = '';
info += 'Username = ' + this.user.username;
info += '\nPassword = ' + this.user.password;
info += '\nConfirm password = ' + this.user.confirmPassword;
alert(info)
}
}
步驟 13:元件模板的完整列表如下:
<div>
<form method="post">
<div class="container">
<label for="username"><b>Username</b></label>
<input type="text" name="username" [(ngModel)]="user.username" required>
<label for="password"><b>Password</b></label>
<input type="password" name="password" [(ngModel)]="user.password" required>
<label for="confirm_password"><b>Confirm Password</b></label>
<input type="password" name="confirm_password" [(ngModel)]="user.confirmPassword" required>
<button type="submit" (click)="showInfo($event)">Register</button>
</div>
</form>
</div>
步驟 14:接下來,執行應用程式,填寫表單並單擊註冊按鈕。它將透過 ngModel 繫結收集資訊,並透過 alert 函式顯示它。
NgStyle
NgStyle 用於向宿主 HTML 元素或元件新增或刪除一組 HTML 樣式。
'''html <div NgStyle="stylelist">
這裡,style-list 是 Record<string, string> 型別的物件。所有鍵都表示 CSS 屬性,其對應的值表示其 CSS 值。一個示例物件如下所示:
classlist: Record<string, boolean> = {
'color': 'red',
'text-decoration': 'underline',
'font-size': '12px'
}
讓我們擴充套件我們的登錄檔單元件以支援驗證,並使用 ngStyle 高亮顯示必填欄位。
步驟 1:在元件中新增新的成員變數 inputStyle。
inputStyle: Record<string, string> = {
'border-color': '#ccc'
}
步驟 2:更新 showInfo() 方法以包含驗證邏輯並更新 inputStyle 物件。
NgClass
NgClass 用於向宿主 HTML 元素或元件新增或刪除一組類。
```html <div NgClass=“classlist”>
這裡,classlist 是 Record<string, boolean> 型別的物件。所有具有真值的鍵都將設定為宿主元素的類。一個示例物件如下所示:
classlist: Record<string, boolean> = {
'c1': true,
'c2': false,
'c3': true
}
NgNonBindable
NgNonBindable 用於阻止對一段文字的 Angular 模板進行處理。只需將文字用具有 ngNonBindable 屬性的 HTML 元素括起來即可。它將按原樣發出接收到的模板,而不會處理模板表示式、模板語句、指令和元件。
```html
<!-- any angular expression / directive / component -->
Hi, angular don't evaluate me and it can have any angular expression such
as {{ 1 + 1 }}, {{ name | uppercase }}. I can have any component as well.
<mycomp input="Hello" />
它用於在 Angular 應用程式本身中展示 Angular 程式碼,而不會受到模板處理的影響。
NgIf
Angular 模板沒有條件邏輯。條件邏輯是使用 NgIf 指令完成的。它根據作為值接受的條件(模板表示式)將宿主 HTML 元素/元件新增到 DOM 佈局或從 DOM 佈局中刪除。
<div *ngIf="canShow"> <!-- content --> </div>
如果 canShow 為真,則顯示內部內容。否則,內容不會新增到 DOM 佈局中。
NgFor
Angular 模板也沒有迴圈邏輯。為了彌補迴圈邏輯的缺失,Angular 提供了 NgFor 指令來迴圈遍歷專案陣列並將其顯示為列表、畫廊、行等。
<ul *ngFor="let item of items">
<li>{{ item }}</li>
</ul>
它將在無序列表中生成 n 個專案,其中 n 表示 items 陣列中可用的專案數。
NgSwitch、NgSwitchCase 和 NgSwitchDefault
Angular 模板也沒有 switch 語句。為了彌補切換邏輯的缺失,Angular 提供了 NgSwitch 及其相關指令來選擇集合(專案)中的任何一個專案。
<div [ngSwitch]="role">
<div *ngSwitchCase="'admin'">
Hi, I have access to admin items
</div>
<div *ngSwitchCase="'user'">
Hi, I have access to user items only
</div>
<div *ngSwitchDefault>
Hi, I have access to guest items only. Please login to access more
items
</div>
</div>
這裡,將根據使用者的型別顯示任何一個部分。