Component Interaction

Pass data between HTML and TS

Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π΄ΠΈΠ½Π°ΠΌΠΈΠΊΠΈ

Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ title

import {Component} from '@angular/core'

@Component({
  selector: 'app-card',
  templateUrl: './card.component.html',
  styleUrls: [
    './card.component.scss'
  ]
})
export class CardComponent {

  title = 'My Card Title'

}

Π§Π΅Ρ€Π΅Π· ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΠΎΠ»ΡΡ†ΠΈΡŽ добавляСм эту ΠΏΠ΅Ρ€Π΅Π½Π½ΡƒΡŽ Π² наш шаблон:

Π˜Π½Ρ‚Π΅Ρ€ΠΏΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠΎΠΆΠ½ΠΎ всС, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ привСсти ΠΊ строкС β€” Π»ΡŽΠ±Ρ‹Π΅ простыС Ρ‚ΠΈΠΏΡ‹. Если ΠΌΡ‹ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ ΠΏΡ€ΠΎΠΈΠ½Ρ‚Π΅Ρ€ΠΏΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Ρ‚ΠΎ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ [object Object]. Π§Ρ‚ΠΎΠ±Ρ‹ всС Ρ‚Π°ΠΊΠΈ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ содСрТимоС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΡƒΡŽ ΡˆΡ‚ΡƒΠΊΡƒ ΠΊΠ°ΠΊ ΠΏΠ°ΠΉΠΏΡ‹. НапримСр, ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚Π½Π΅ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² json:

Π§Π΅Ρ€Π΅Π· ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ (ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π² классС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°)

Π’ angular ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ символы для интСрполяции:

Bindings

Π­Ρ‚ΠΎ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ связки ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° ΠΈ шаблона, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ присутствуСт Π² Angular. ΠŸΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ Π² одностороннСм порядкС ΡΠ²ΡΠ·Ρ‹Π²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ (измСнилось Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π΅ β€” измСнилось Π²ΠΎ view).

Допустим, ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΌΠ΅Π½ΡΡ‚ΡŒ динамичСски ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ элСмСнт шаблона (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ).

Π’ html:

Π­Ρ‚ΠΎ сработаСт, Π½ΠΎ Ρ‚Π°ΠΊΠΎΠΉ синтаксис Π½Π΅ совсСм ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π΅Π½. Для этого Π΅ΡΡ‚ΡŒ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ binding.

ДСлаСтся это Ρ‡Π΅Ρ€Π΅Π· ΠΎΠ±ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π½ΠΈΠ΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° Π² ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Π΅ скобки:

Π‘ΠΎΠΎΡ‚Π², Angualr ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° Π±ΡƒΠ΄Π΅Ρ‚ ΠΊΠΎΠ΄ TS (ΠΈΠ»ΠΈ JS).

Event binding (Two Way Binding)

ДСлаСтся это Ρ‡Π΅Ρ€Π΅Π· оборачивания события Π² ΠΊΡ€ΡƒΠ³Π»Ρ‹Π΅ скобки ΠΈ прописывания ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°:

Π’ angular Π΅ΡΡ‚ΡŒ встроСнный ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт это Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Ρ‰Π΅ ΠΏΡ€ΠΎΡ‰Π΅. Для этого Π² нашСм ΠΌΠΎΠ΄ΡƒΠ»Π΅, Π² ΠΏΠΎΠ»Π΅ imports ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ β€” FormsModule:

ΠœΠΎΠ΄ΡƒΠ»ΡŒ FormsModule содСрТит Π² сСбС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, которая позволяСт Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Ρ„ΠΎΡ€ΠΌΠ°ΠΌΠΈ, ΠΈ содСрТит Π² сСбС ngModel, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Two Way Binding Π³ΠΎΡ€Π°Π·Π΄ΠΎ ΠΏΡ€ΠΎΡ‰Π΅ (ΠΌΡ‹ просто ΠΎΠ±ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π΅ΠΌ ΠΈ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Π΅ ΠΈ Π² ΠΊΡ€ΡƒΠ³Π»Ρ‹Π΅ скобки ngModel ΠΈ Π² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅ΠΌ Ρ‚ΠΎ ΠΏΠΎΠ»Π΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Ρ…ΠΎΡ‚ΠΈΠΌ ΡΠ²ΡΠ·Π°Ρ‚ΡŒ Π² двустороннСм порядкС):

Pass data between parent and child components

Parent -> Child ( @Input() )

ДСлаСтся это ΠΏΡƒΡ‚Π΅ΠΌ объявлСния поля Ρ‡Π΅Ρ€Π΅Π· Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ @Input().

Π“Π΄Π΅-Ρ‚ΠΎ Π² объявлСнии ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°:

Child -> Parent ( @Output() )

ДСлаСтся это ΠΏΡƒΡ‚Π΅ΠΌ объявлСния поля Ρ‡Π΅Ρ€Π΅Π· Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ @Output().

Π“Π΄Π΅-Ρ‚ΠΎ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π΅

Calls functions to other components

Calls child's functions from the parent component

ДСлаСтся Ρ‡Π΅Ρ€Π΅Π· ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° β€” #childComponent. ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

Π”Ρ€ΡƒΠ³ΠΎΠΉ способ (Π±ΠΎΠ»Π΅Π΅ Π³ΠΈΠ±ΠΊΠΈΠΉ) β€” ΠΈΠ½ΠΆΠ΅ΠΊΡ‚ΠΈΡ‚ΡŒ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π²Π½ΡƒΡ‚Ρ€ΡŒ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ Ρ‡Π΅Ρ€Π΅Π· @ViewChild. ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

Using a service

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ сСрвиса:

Π ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚

Π”ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚

ΠžΡ‚ΠΏΠΈΡΠΊΠ° ΠΎΡ‚ событий Π² ngOnDestroy() ΠΊΡ€Π°ΠΉΠ½Π΅ Π²Π°ΠΆΠ½Π° для Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΡ… элСмСнтов, Ρ‚ΠΊ это Π·Π°Ρ‰ΠΈΡ‰Π°Π΅Ρ‚ ΠΎΡ‚ ΡƒΡ‚Π΅Ρ‡Π΅ΠΊ памяти (для Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΡ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² этого Π΄Π΅Π»Π°Ρ‚ΡŒ Π½Π΅ Π½Π°Π΄ΠΎ, Ρ‚ΠΊ сСрвис SomeService закрываСтся вмСстС с Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠΌ).

Last updated