哈囉,各位邦友們!
昨天我們把專案建好,今天正式走進 Angular 的核心:Component。先抓住 @Component 的骨架,再做一個小小的子元件,最後以 imports 串起父子關係,為明天的範本語法與 @if 鋪路。
一、@Component
// src/app/app.ts
import { Component, signal } from '@angular/core';
// ...existing code...
@Component({
selector: 'app-root',
imports: [
// 之後放入 HeroBadgeComponent 或常用功能
],
templateUrl: './app.html',
styleUrl: './app.scss'
})
export class App {
protected readonly title = signal('hero-journey');
}
// src/app/app.html
<h1>Hello, {{ title() }}</h1>
<!-- 之後會放入 <app-hero-badge /> -->
// src/app/app.scss
:host {
display: block;
padding: 16px;
}
h1 {
margin: 0 0 12px;
}
二、用 CLI 產生子元件 HeroBadge元件
ng g component hero-badge
產生後,打開檔案並確認:
// src/app/hero-badge/hero-badge.ts
import { Component } from '@angular/core';
@Component({
selector: 'app-hero-badge',
imports: [],
templateUrl: './hero-badge.html',
styleUrl: './hero-badge.scss'
})
export class HeroBadge {}
// src/app/hero-badge/hero-badge.html
<span class="badge">New Hero</span>
// src/app/hero-badge/hero-badge.scss
:host {
display: inline-block;
}
.badge {
padding: 4px 8px;
border-radius: 4px;
background: #eef;
font-weight: 600;
}
三、在 App 使用子元件(透過 imports)
// src/app/app.ts
// ...existing code...
import { HeroBadge } from './hero-badge/hero-badge';
@Component({
selector: 'app-root',
imports: [HeroBadge],
templateUrl: './app.html',
styleUrl: './app.scss'
})
export class App {
protected readonly title = signal('hero-journey');
}
// src/app/app.html
<h1>Hello, {{ title() }}</h1>
<app-hero-badge></app-hero-badge>
說明:
簡短 QA:
驗收清單:
常見錯誤與排查:
今日小結: