1. Как создавать компоненты

Для начала создадим два базовых компонента приложения

ng g c post-list --skipTests
ng g c post --skipTests

app > post > post.component.html

<div class='card'>
	<h2>{{title}}</h2>
	<p>{{text}}</p>
</div>

app > post-form > post-form.component.html

<div>
	<input type='text' placeholder='Title...'>
	<input type='text' placeholder='Text...'>
 
	<button class='btn'>Add post</button>
</div>

2. Передача параметров

В первую очередь нужно в целевой компонент добавить поле со значением, которое придёт извне и обернуть его в декоратор Input, который скажет, что это значение компонент будет принимать извне

app > post > post.component.ts

import { Component, Input, OnInit } from '@angular/core';
import { Post } from '../app.component';
 
@Component({
	selector: 'app-post',
	templateUrl: './post.component.html',
	styleUrls: ['./post.component.scss'],
})
export class PostComponent implements OnInit {
	@Input() post: Post;
 
	constructor() {}
 
	ngOnInit() {}
}

app > post > post.component.html

<div class='card'>
	<h2>{{post.title}}</h2>
	<p>{{post.text}}</p>
</div>

Тут находятся данные, которые будут переданы в дочерний компонент и их интерфейс

app > app.component.ts

import { Component } from '@angular/core';
 
export interface Post {
	id: number;
	title: string;
	text: string;
}
 
@Component({
	selector: 'app-root',
	templateUrl: './app.component.html',
	styleUrls: ['./app.component.scss'],
})
export class AppComponent {
	posts: Post[] = [
		{ title: 'JS', text: 'Самый лучший язык в мире', id: 1 },
		{ title: 'C#', text: 'Самый любимый язык в мире', id: 1 },
	];
 
	constructor() {}
}

И далее через ngFor итерируем компонент и передаём переменную-итератор в компонент через [post]

app > app.component.html

<div class='container'>
	<h1>Angular App</h1>
	<app-post-form></app-post-form>
	<hr>
	<app-post *ngFor='let p of posts' [post]='p'></app-post>
</div>

Так же в декоратор можно передать имя пропса, который мы передаём, если нам нужно будет другое имя пропса

3. Передача параметров из компонентов

4. Доступ до HTML элементов

5. Передача HTML в компонент

6. Доступ до контента с ContentChild

7. Жизненный цикл (lifecycle hooks)

8. Change Detection Strategy

9. Стили с ViewEncapsulation