
- 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 - GET 請求
- 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 NgModule
- 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 元件
正如我們前面學到的,元件是 Angular 應用程式的構建塊。Angular 元件的主要作用是生成網頁的一部分,稱為檢視。每個元件都有一個關聯的模板,它將用於生成檢視。
讓我們在本節中學習元件和模板的基本概念。
新增元件
讓我們在我們的ExpenseManager應用程式中建立一個新元件。
開啟命令提示符並轉到ExpenseManager應用程式。
cd /go/to/expense-manager
使用如下所示的ng generate component命令建立一個新元件:
ng generate component expense-entry
輸出
輸出如下所示:
CREATE src/app/expense-entry/expense-entry.component.html (28 bytes) CREATE src/app/expense-entry/expense-entry.component.spec.ts (671 bytes) CREATE src/app/expense-entry/expense-entry.component.ts (296 bytes) CREATE src/app/expense-entry/expense-entry.component.css (0 bytes) UPDATE src/app/app.module.ts (431 bytes)
這裡:
- ExpenseEntryComponent建立在 src/app/expense-entry 資料夾下。
- 建立了元件類、模板和樣式表。
- AppModule 已更新為包含新元件。
向ExpenseEntryComponent (src/app/expense-entry/expense-entry.component.ts) 元件新增 title 屬性。
import { Component, OnInit } from '@angular/core'; @Component({ selector: 'app-expense-entry', templateUrl: './expense-entry.component.html', styleUrls: ['./expense-entry.component.css'] }) export class ExpenseEntryComponent implements OnInit { title: string; constructor() { } ngOnInit() { this.title = "Expense Entry" } }
使用以下內容更新模板src/app/expense-entry/expense-entry.component.html。
<p>{{ title }}</p>
開啟src/app/app.component.html幷包含新建立的元件。
<h1>{{ title }}</h1> <app-expense-entry></app-expense-entry>
這裡:
app-expense-entry是選擇器值,可以用作常規 HTML 標籤。
最後,應用程式的輸出如下所示:

在學習更多關於模板的知識的過程中,我們將更新元件的內容。
模板
Angular 元件的組成部分是模板。它用於生成 HTML 內容。模板是具有附加功能的純 HTML。
附加模板
模板可以使用@Component裝飾器的元資料附加到 Angular 元件。Angular 提供兩種元資料將模板附加到元件。
templateUrl
我們已經知道如何使用 templateUrl。它需要模板檔案的相對路徑。例如,AppComponent 將其模板設定為 app.component.html。
templateUrl: './app.component.html',
template
template 允許將 HTML 字串放在元件本身內部。如果模板內容最少,那麼將其放在元件類本身中以便於跟蹤和維護。
@Component({ selector: 'app-root', templateUrl: `<h1>{{ title }}</h1>`, styleUrls: ['./app.component.css'] }) export class AppComponent implements OnInit { title = 'Expense Manager'; constructor(private debugService : DebugService) {} ngOnInit() { this.debugService.info("Angular Application starts"); } }
附加樣式表
Angular 模板可以使用與 HTML 類似的 CSS 樣式。模板從兩個來源獲取其樣式資訊:a) 來自其元件 b) 來自應用程式配置。
元件配置
Component 裝飾器提供兩個選項,styles 和styleUrls,用於向其模板提供 CSS 樣式資訊。
- Styles − styles 選項用於將 CSS 放置在元件本身內部。
styles: ['h1 { color: '#ff0000'; }']
- styleUrls − styleUrls 用於引用外部 CSS 樣式表。我們也可以使用多個樣式表。
styleUrls: ['./app.component.css', './custom_style.css']
應用程式配置
Angular 在專案配置(angular.json)中提供了一個選項來指定 CSS 樣式表。在angular.json中指定的樣式將適用於所有模板。讓我們檢查我們的angular.json,如下所示:
{ "projects": { "expense-manager": { "architect": { "build": { "builder": "@angular-devkit/build-angular:browser", "options": { "outputPath": "dist/expense-manager", "index": "src/index.html", "main": "src/main.ts", "polyfills": "src/polyfills.ts", "tsConfig": "tsconfig.app.json", "aot": false, "assets": [ "src/favicon.ico", "src/assets" ], "styles": [ "src/styles.css" ], "scripts": [] }, }, } }}, "defaultProject": "expense-manager" }
這裡:
styles 選項將src/styles.css 設定為全域性 CSS 樣式表。我們可以包含任意數量的 CSS 樣式表,因為它支援多個值。
包含 Bootstrap
讓我們使用styles選項將 Bootstrap 包含到我們的ExpenseManager應用程式中,並將預設模板更改為使用 Bootstrap 元件。
開啟命令提示符並轉到 ExpenseManager 應用程式。
cd /go/to/expense-manager
使用以下命令安裝bootstrap和JQuery庫
npm install --save bootstrap@4.5.0 jquery@3.5.1
這裡:
我們安裝了 JQuery,因為 Bootstrap 廣泛使用 JQuery 來實現高階元件。
選項angular.json 並設定 Bootstrap 和 JQuery 庫路徑。
{ "projects": { "expense-manager": { "architect": { "build": { "builder":"@angular-devkit/build-angular:browser", "options": { "outputPath": "dist/expense-manager", "index": "src/index.html", "main": "src/main.ts", "polyfills": "src/polyfills.ts", "tsConfig": "tsconfig.app.json", "aot": false, "assets": [ "src/favicon.ico", "src/assets" ], "styles": [ "./node_modules/bootstrap/dist/css/bootstrap.css", "src/styles.css" ], "scripts": [ "./node_modules/jquery/dist/jquery.js", "./node_modules/bootstrap/dist/js/bootstrap.js" ] }, }, } }}, "defaultProject": "expense-manager" }
這裡:
scripts 選項用於包含 JavaScript 庫。透過scripts註冊的JavaScript將可用於應用程式中的所有 Angular 元件。
開啟app.component.html並將內容更改為如下所示
<!-- Navigation --> <nav class="navbar navbar-expand-lg navbar-dark bg-dark static-top"> <div class="container"> <a class="navbar-brand" href="#">{{ title }}</a> <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarResponsive" aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon"> </span> </button> <div class="collapse navbar-collapse" id="navbarResponsive"> <ul class="navbar-nav ml-auto"> <li class="nav-item active"> <a class="nav-link" href="#">Home <span class="sr-only">(current) </span> </a> </li> <li class="nav-item"> <a class="nav-link" href="#">Report</a> </li> <li class="nav-item"> <a class="nav-link" href="#">Add Expense</a> </li> <li class="nav-item"> <a class="nav-link" href="#">About</a> </li> </ul> </div> </div> </nav> <app-expense-entry></app-expense-entry>
這裡:
使用了 Bootstrap 導航和容器。
開啟src/app/expense-entry/expense-entry.component.html 並放置以下內容。
<!-- Page Content --> <div class="container"> <div class="row"> <div class="col-lg-12 text-center" style="padding-top: 20px;"> <div class="container" style="padding-left: 0px; padding-right: 0px;"> <div class="row"> <div class="col-sm" style="text-align: left;"> {{ title }} </div> <div class="col-sm" style="text-align: right;"> <button type="button" class="btn btn-primary">Edit</button> </div> </div> </div> <div class="container box" style="margin-top: 10px;"> <div class="row"> <div class="col-2" style="text-align: right;"> <strong><em>Item:</em></strong> </div> <div class="col" style="text-align: left;"> Pizza </div> </div> <div class="row"> <div class="col-2" style="text-align: right;"> <strong><em>Amount:</em></strong> </div> <div class="col" style="text-align: left;"> 20 </div> </div> <div class="row"> <div class="col-2" style="text-align: right;"> <strong><em>Category:</em></strong> </div> <div class="col" style="text-align: left;"> Food </div> </div> <div class="row"> <div class="col-2" style="text-align: right;"> <strong><em>Location:</em></strong> </div> <div class="col" style="text-align: left;"> Zomato </div> </div> <div class="row"> <div class="col-2" style="text-align: right;"> <strong><em>Spend On:</em></strong> </div> <div class="col" style="text-align: left;"> June 20, 2020 </div> </div> </div> </div> </div> </div>
重新啟動應用程式。
應用程式的輸出如下所示:

我們將在下一章中改進應用程式以處理動態支出條目。