рдХреЛрдгреАрдп рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЬрд╝реЛрди рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХреБрдЫ рджреЗрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд╣ рдХреЛрдгреАрдп рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рд▓рдЧрднрдЧ рдЬрд╛рджреБрдИ рдЖрд╕рд╛рдиреА рд╣рд╛рд╕рд┐рд▓ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддреА рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд▓рдЧрднрдЧ рд╣рдореЗрд╢рд╛, рдЬрдм рдЖрдкрдХреЛ рдмрд╕ рдХреБрдЫ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдФрд░ рд╣рдо рдЗрд╕реЗ рдХрд┐рд╕реА рднреА рдЪреАрдЬ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдиреЗ рдХреЗ рдмрд┐рдирд╛ рдмрджрд▓рддреЗ рд╣реИрдВ, рддреЛ рдХреЛрдгреАрдп рдЗрд╕реА рдШрдЯрдХреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИред рдирддреАрдЬрддрди, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЬреЛ рджреЗрдЦрддрд╛ рд╣реИ рдЙрд╕рдореЗрдВ рд╣рдореЗрд╢рд╛ рдирд╡реАрдирддрдо рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрддреА рд╣реИред рдпрд╣ рд╕рд┐рд░реНрдл рдорд╣рд╛рди рд╣реИред
рдпрд╣рд╛рдВ рдореИрдВ рдХреБрдЫ рдкрд╣рд▓реБрдУрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдирдП рдЖрдЗрд╡реА рдХрдВрдкрд╛рдЗрд▓рд░ (рдЬреЛ рдХрд┐ рдХреЛрдгреАрдп 9 рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдЬрд╝реЛрди рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдЕрд╕реНрд╡реАрдХреГрддрд┐ рдХреЛ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИред

рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдЫреЛрдбрд╝рдиреЗ рд╕реЗ, рдореИрдВ рднрд╛рд░реА рднрд╛рд░ рдХреЗ рддрд╣рдд рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рдХреЛрдгреАрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдмрдврд╝рд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ред рдЙрд╕реА рд╕рдордп, рдореИрдВ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдбреЗрдХреЛрд░реЗрдЯрд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреА рдЬрд╝рд░реВрд░рдд рдХреЗ рддрдВрддреНрд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛, рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг рд╕рд┐рд╕реНрдЯрдо рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рдмрд╣реБрдд рдХрдо рдЕрддрд┐рд░рд┐рдХреНрдд рд▓рд╛рдЧрдд рдЖрдИред
рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХреЛрдгреАрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗрд╡рд▓ рдЗрд╕рд▓рд┐рдП рд╕рдВрднрд╡ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдгреАрдп рдЖрдЗрд╡реА рдФрд░ рдПрдУрдЯреА рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рдХреНрд╖рдо рд╣реИрдВред рдпрд╣ рд▓реЗрдЦ рд╢реИрдХреНрд╖рд┐рдХ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рдХреЛрдгреАрдп рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЛ рдмрдврд╝рд╛рд╡рд╛ рджрд┐рдпрд╛ рдЬрд╛рдПред
рдЖрдкрдХреЛ рдЬрд╝реЛрди рдХреЗ рдмрд┐рдирд╛ рдХреЛрдгреАрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реЛ рд╕рдХрддреА рд╣реИред
рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдо рдЬрд╛рд░реА рд░рдЦреЗрдВ, рдЪрд▓реЛ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреНрд░рд╢реНрди рдкреВрдЫреЗрдВ: "рдХреНрдпрд╛ рдпрд╣ рдЬрд╝реЛрди рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИред рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдпрд╣ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣рдореЗрдВ рдереЛрдбрд╝реЗ рдкреНрд░рдпрд╛рд╕ рдХреЗ рд╕рд╛рде рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ?" рдмреЗрд╢рдХ, рдпрд╣ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реИред рд▓реЗрдХрд┐рди, рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рдЖрдкрдХреЛ рд╣рд░ рдЪреАрдЬ рдХреЗ рд▓рд┐рдП рднреБрдЧрддрд╛рди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдпрджрд┐ рдЖрдкрдХреЗ рдЖрд╡реЗрджрди рдореЗрдВ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рджрд░реНрд╢рди рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ рд╣реИрдВ, рддреЛ рдЬрд╝реЛрди рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдирд╛ рдЙрди рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдПрдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЬрд┐рд╕рдореЗрдВ рдкреНрд░рджрд░реНрд╢рди рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрд╣реБрдд рдмрд╛рд░ рдЕрджреНрдпрддрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЗрд╕ рддрд░рд╣ рдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдХреЗ рд╡реНрдпрд╛рдкрд╛рд░рд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдмрджрд▓ рдЧрдИред рдЗрд╕рдХрд╛ рдХреНрд▓рд╛рдЗрдВрдЯ рд╣рд┐рд╕реНрд╕рд╛ рд▓рдЧрд╛рддрд╛рд░ рд╡реЗрдмрд╕реЙрдлреНрдЯ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред рдЗрди рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рдбреЗрдЯрд╛ рдХреЛ рдЬрд┐рддрдиреА рдЬрд▓реНрджреА рд╣реЛ рд╕рдХреЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдХреЛрдгреАрдп рд╕реЗ рдЬрд╝реЛрди рдирд┐рдХрд╛рд▓реЗрдВ
рдХреЛрдгреАрдп рдХреНрд╖реЗрддреНрд░ рдХреЗ рдмрд┐рдирд╛ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдгреАрдп рдЖрд╕рд╛рдиреА рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рд╕рдВрдмрдВрдзрд┐рдд рдЖрдпрд╛рдд рдХрдорд╛рдВрдб рдХреЛ рдЯрд┐рдкреНрдкрдгреА рдпрд╛ рд╣рдЯрд╛рдирд╛ рд╣реЛрдЧрд╛, рдЬреЛ рдХрд┐
polyfills.ts
рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИред
рдЬрд╝реЛрди рдмрд╛рд╣рд░ рдЯрд┐рдкреНрдкрдгреА рдХреАред рдЖрдпрд╛рдд рдЖрджреЗрд╢рдЕрдЧрд▓рд╛ - рдЖрдкрдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд╕рд╛рде рд░реВрдЯ рдореЙрдбреНрдпреВрд▓ рд╕реЗ рд▓реИрд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
platformBrowserDynamic() .bootstrapModule(AppModule, { ngZone: 'noop' }) .catch(err => console.error(err));
рдХреЛрдгреАрдп рдЖрдЗрд╡реА: рд╕реНрд╡-рдкрд╣рдЪрд╛рди рдкрд░рд┐рд╡рд░реНрддрди etdetectChanges рдФрд░ vymarkDirty рдХреЗ рд╕рд╛рде
рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдо рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдбреЗрдХреЛрд░реЗрдЯрд░ рдмрдирд╛рдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХреЗрдВ, рд╣рдореЗрдВ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ рдХрд┐ рдЖрдЗрд╡реА рдЖрдкрдХреЛ рдШрдЯрдХ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдпрд╣ рдЧрдВрджрд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЬрд╝реЛрди рдФрд░ рдбреАрдЖрдИ рдХреЛ рджрд░рдХрд┐рдирд╛рд░ рдХрд░ рджреЗрддрд╛ рд╣реИред
@angular/core
рд╕реЗ рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдП рдЧрдП рджреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд╛рд░реНрдп рдЕрдм рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИрдВред рдпреЗ
╔╡detectChanges
рдФрд░
╔╡markDirty
ред рдпреЗ рджреЛ рдХрд╛рд░реНрдп рдЕрднреА рднреА рдЖрдВрддрд░рд┐рдХ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рд▓рдХреНрд╖рд┐рдд рд╣реИрдВ рдФрд░ рдЕрд╕реНрдерд┐рд░ рд╣реИрдВ - рдкреНрд░рддреАрдХ
╔╡
рдЙрдирдХреЗ рдирд╛рдореЛрдВ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИред
рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдЗрди рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдПред
╞Я ╔╡markDirty рдлрд╝рдВрдХреНрд╢рди
рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдЖрдкрдХреЛ рдПрдХ рдШрдЯрдХ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рдЗрд╕реЗ "рдЧрдВрджрд╛" рдмрдирд╛рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд, рдкреБрди: рдкреНрд░рддрд┐рдкрд╛рджрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдпрджрд┐ рдШрдЯрдХ рдХреЛ "рдЧрдВрджрд╛" рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЙрд╕реЗ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рд╣реИред
import { ╔╡markDirty as markDirty } from '@angular/core'; @Component({...}) class MyComponent { setTitle(title: string) { this.title = title; markDirty(this); } }
тЦН тЦНdetectChanges рдлрд╝рдВрдХреНрд╢рди
рдХреЛрдгреАрдп рдЖрдВрддрд░рд┐рдХ рдкреНрд░рд▓реЗрдЦрди рдХрд╛ рдХрд╣рдирд╛ рд╣реИ рдХрд┐, рдкреНрд░рджрд░реНрд╢рди рдХрд╛рд░рдгреЛрдВ рд╕реЗ, рдЖрдкрдХреЛ
╔╡detectChanges
рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдпрд╣
╔╡markDirty
рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд╢рдВрд╕рд┐рдд рд╣реИред
╔╡detectChanges
рдлрд╝рдВрдХреНрд╢рди рд╕рдордХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рдПрдХ рдШрдЯрдХ рдФрд░ рдЙрд╕рдХреЗ
╔╡detectChanges
рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЖрдордВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред
import { ╔╡detectChanges as detectChanges } from '@angular/core'; @Component({...}) class MyComponent { setTitle(title: string) { this.title = title; detectChanges(this); } }
рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдбреЗрдХреЛрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдПрдВ
рдпрджреНрдпрдкрд┐, рдХреЛрдгреАрдп рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ DI рдХреЛ рдШреВрдордиреЗ рджреЗрдХрд░ рд╡рд┐рдХрд╛рд╕ рдХреА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЛ рдмрдврд╝рд╛рддреА рд╣реИрдВ, рдлрд┐рд░ рднреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдЗрд╕ рддрдереНрдп рд╕реЗ рдирд┐рд░рд╛рд╢рд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ рдХрд┐ рдЙрд╕реЗ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕реНрд╡рдпрдВ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдФрд░ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╢реБрд░реБрдЖрдд рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдбреЗрдХреЛрд░реЗрдЯрд░ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░реЗрдЧрд╛ред рдмреЗрд╢рдХ, рдпрд╣рд╛рдВ рдХреБрдЫ рд╕реАрдорд╛рдПрдВ рд╣реИрдВ, рдЬрд┐рдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдо рдиреАрдЪреЗ рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдареАрдХ рд╡реИрд╕рд╛ рд╣реА рд╣реБрдЖ рдЬреИрд╕рд╛ рдореБрдЭреЗ рдЪрд╛рд╣рд┐рдП рдерд╛ред
Ervedрднрд╛рд░рдд рдХреА рд╢реЛрднрд╛ рдмрдврд╝рд╛рддреЗ рд╣реБрдП
рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрдерд╛рд╕рдВрднрд╡ рдХрдо рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рдПрдХ рдбреЗрдХреЛрд░реЗрдЯрд░ рдмрдирд╛рдПрдВрдЧреЗ рдЬрд┐рд╕реЗ рддреАрди рддрд░реАрдХреЛрдВ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЕрд░реНрдерд╛рддреН, рдпрд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдВрд╕реНрдерд╛рдУрдВ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ:
- рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рддрд░реАрдХреЛрдВ рдХреЗ рд▓рд┐рдПред
- рдЕрд╡рд▓реЛрдХрдиреАрдп рд╡рд╕реНрддреБред
- рд╕рд╛рдзрд╛рд░рдг рд╡рд╕реНрддреБрдУрдВ рдХреЛред
рдЫреЛрдЯреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХреЗ рдЯреБрдХрдбрд╝реЗ рдореЗрдВ, рд╣рдо
state
рд╡рд╕реНрддреБ рдФрд░
changeTitle
рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП
changeTitle
@observed
рдбреЗрдХреЛрд░реЗрдЯрд░ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ:
export class Component { title = ''; @observed() state = { name: '' }; @observed() changeTitle(title: string) { this.title = title; } changeName(name: string) { this.state.name = name; } }
state
рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдкреНрд░реЙрдХреНрд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред- рд╣рдо рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдХреЗ
changeTitle
рд╡рд┐рдзрд┐ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдкрд╣рд▓реЗ рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИред
рдФрд░ рдпрд╣рд╛рдБ
BehaviorSubject
рд╕рд╛рде рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
export class AppComponent { @observed() show$ = new BehaviorSubject(true); toggle() { this.show$.next(!this.show$.value); } }
рдЕрд╡рд▓реЛрдХрди рдпреЛрдЧреНрдп рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдбреЗрдХреЛрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд▓рдЧрддрд╛ рд╣реИред рдЕрд░реНрдерд╛рддреН, рдЖрдкрдХреЛ рджреЗрдЦреА рдЧрдИ рд╡рд╕реНрддреБ рдХреЛ рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдм рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рд╕рджрд╕реНрдпрддрд╛ рдореЗрдВ "рдЧрдВрджреЗ" рдХреЗ рд░реВрдк рдореЗрдВ рдШрдЯрдХ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рд╕рдмреНрд╕рдХреНрд░рд┐рдкреНрд╢рди рдХреЛ рдЦрд╛рд▓реА рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕рджрд╕реНрдпрддрд╛ рдФрд░ рдмрд╛рдж рдореЗрдВ рдЗрд╕реЗ рд╕рд╛рдл рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
ngOnInit
рдФрд░
ngOnDestroy
рдХреЛ рдкреБрди: рдЕрд╕рд╛рдЗрди
ngOnInit
ред
тЦН рдПрдХ рдбреЗрдХреЛрд░реЗрдЯрд░ рдХрд╛ рдирд┐рд░реНрдорд╛рдг
рдпрд╣рд╛рдБ
observed
рдбреЗрдХреЛрд░реЗрдЯрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╣реИ:
export function observed() { return function( target: object, propertyKey: string, descriptor?: PropertyDescriptor ) {} }
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ,
descriptor
рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИред рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╣рдореЗрдВ рдбреЗрдХреЛрд░реЗрдЯрд░ рдХреЛ рддрд░реАрдХреЛрдВ рдФрд░ рдЧреБрдгреЛрдВ рджреЛрдиреЛрдВ рдкрд░ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрджрд┐ рдкреИрд░рд╛рдореАрдЯрд░ рдореМрдЬреВрдж рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдбреЗрдХреЛрд░реЗрдЯрд░ рд╡рд┐рдзрд┐ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдпрд╣ рдХрд░рддреЗ рд╣реИрдВ:
рдЕрдЧрд▓рд╛, рдЖрдкрдХреЛ рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХреА рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдпрд╣ рдПрдХ рдЕрд╡рд▓реЛрдХрдиреАрдп рд╡рд╕реНрддреБ рдпрд╛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╡рд╕реНрддреБ рд╣реЛ рд╕рдХрддреА рд╣реИред рдпрд╣рд╛рдВ рд╣рдо рдПрдХ рдФрд░ рдЖрдВрддрд░рд┐рдХ рдХреЛрдгреАрдп рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐, рдирд┐рдпрдорд┐рдд рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЕрднрд┐рдкреНрд░реЗрдд рдирд╣реАрдВ рд╣реИ (рдХреНрд╖рдорд╛ рдХрд░реЗрдВ!)ред
рд╣рдо
╔╡cmp
рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЬреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдХреЛрдгреАрдп рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рдЧреБрдгреЛрдВ рдХреА рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рд╣рдо
onInit
рдФрд░
onInit
onDestroy
рдХреА рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
const getCmp = type => (type).╔╡cmp; const cmp = getCmp(target.constructor); const onInit = cmp.onInit || noop; const onDestroy = cmp.onDestroy || noop;
рдХрд┐рд╕реА рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдЪрд┐рдиреНрд╣рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо
ReflectMetadata
рдЙрдкрдпреЛрдЧ
ReflectMetadata
рдФрд░ рдЙрд╕рдХреЗ рдореВрд▓реНрдп рдХреЛ
true
ред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдо рдЬрд╛рдиреЗрдВрдЧреЗ рдХрд┐ рдШрдЯрдХ рдХреЗ рдЖрд░рдореНрдн рд╣реЛрдиреЗ рдкрд░ рд╣рдореЗрдВ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
Reflect.set(target, propertyKey, true);
рдЕрдм
onInit
рд╣реБрдХ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдФрд░ рдШрдЯрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рддреЗ рд╕рдордп рдЧреБрдгреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ:
cmp.onInit = function() { checkComponentProperties(this); onInit.call(this); };
рд╣рдо
checkComponentProperties
рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдШрдЯрдХ рдХреЗ рдЧреБрдгреЛрдВ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░реЗрдЧрд╛, рдЬреЛ рдкрд╣рд▓реЗ
Reflect.set
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдореВрд▓реНрдп рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЙрдиреНрд╣реЗрдВ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рддрд╛ рд╣реИ:
const checkComponentProperties = (ctx) => { const props = Object.getOwnPropertyNames(ctx); props.map((prop) => { return Reflect.get(target, prop); }).filter(Boolean).forEach(() => { checkProperty.call(ctx, propertyKey); }); };
checkProperty
рдлрд╝рдВрдХреНрд╢рди рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЧреБрдгреЛрдВ рдХреЛ рд╕рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реЛрдЧрд╛ред рдкрд╣рд▓реЗ, рд╣рдо рдЬрд╛рдВрдЪрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╕рдВрдкрддреНрддрд┐ рдПрдХ рдЕрд╡рд▓реЛрдХрди рдпреЛрдЧреНрдп рдпрд╛ рдирд┐рдпрдорд┐рдд рд╡рд╕реНрддреБ рд╣реИред рдпрджрд┐ рдпрд╣ рдПрдХ рдЕрд╡рд▓реЛрдХрди рдпреЛрдЧреНрдп рд╡рд╕реНрддреБ рд╣реИ, рддреЛ рд╣рдо рдЗрд╕рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреА рдЖрдВрддрд░рд┐рдХ рдЬрд░реВрд░рддреЛрдВ рдХреЗ рд▓рд┐рдП рдШрдЯрдХ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╕рджрд╕реНрдпрддрд╛ рдХреА рд╕реВрдЪреА рдореЗрдВ рд╕рджрд╕реНрдпрддрд╛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред
const checkProperty = function(name: string) { const ctx = this; if (ctx[name] instanceof Observable) { const subscriptions = getSubscriptions(ctx); subscriptions.add(ctx[name].subscribe(() => { markDirty(ctx); })); } else {
рдпрджрд┐ рд╕рдВрдкрддреНрддрд┐ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╡рд╕реНрддреБ рд╣реИ, рддреЛ рд╣рдо рдЙрд╕реЗ рдкреНрд░реЙрдХреНрд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдмрджрд▓ рджреЗрдВрдЧреЗ рдФрд░ рдЙрд╕рдХреЗ
handler
рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ
markDirty
рдХреЛ рдХреЙрд▓
markDirty
:
const handler = { set(obj, prop, value) { obj[prop] = value; ╔╡markDirty(ctx); return true; } }; ctx[name] = new Proxy(ctx, handler);
рдЕрдВрдд рдореЗрдВ, рдЖрдкрдХреЛ рдШрдЯрдХ рдХреЛ рдирд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╕рджрд╕реНрдпрддрд╛ рдХреЛ рд╕рд╛рдл рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
cmp.onDestroy = function() { const ctx = this; if (ctx[subscriptionsSymbol]) { ctx[subscriptionsSymbol].unsubscribe(); } onDestroy.call(ctx); };
рдЗрд╕ рдбреЗрдХреЛрд░реЗрдЯрд░ рдХреА рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХреЛ рд╡реНрдпрд╛рдкрдХ рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╡реЗ рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рдЙрдкрдпреЛрдЧреЛрдВ рдХреЛ рдХрд╡рд░ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдПрдХ рдмрдбрд╝реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпреЗ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рдСрдмреНрдЬрд╝рд░реНрд╡реЗрдмрд▓ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВред
рдЗрд╕рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдЙрдкрд░реЛрдХреНрдд рд╕рдЬреНрдЬрд╛рдХрд╛рд░ рдореЗрд░реА рдЫреЛрдЯреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рд╕рд╛рдордЧреНрд░реА рдХреЗ рдЕрдВрдд рдореЗрдВ рдЖрдкрдХреЛ рдЗрд╕рдХрд╛ рдкреВрд░рд╛ рдХреЛрдб рдорд┐рд▓реЗрдЧрд╛ред
рдЕрдиреБрдкреНрд░рдпреЛрдЧ рддреНрд╡рд░рдг рдкрд░рд┐рдгрд╛рдореЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг
рдЕрдм рдЬрдм рд╣рдордиреЗ рдЖрдЗрд╡реА рдХреЗ рдЖрдВрддрд░рд┐рдХ рддрдВрддреНрд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝реА рд╕реА рдмрд╛рдд рдХреА рд╣реИ, рдФрд░ рдЗрди рддрдВрддреНрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдбреЗрдХреЛрд░реЗрдЯрд░ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдП, рддреЛ рдпрд╣ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ рдХрд┐ рд╣рдореЗрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЖрд╡реЗрджрди рдореЗрдВ рдХреНрдпрд╛ рдорд┐рд▓рд╛ рд╣реИред
рдореИрдВ, рдХреЛрдгреАрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдкрд░ рдЬрд╝реЛрди рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХреЗ рдкреНрд░рднрд╛рд╡ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдореЗрд░реА
рдХреНрд░рд┐рдкреНрдЯреЛрдлрд╝реЛрд▓рд┐рдпреЛ рд╢реМрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ред
рдореИрдВрдиреЗ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЛ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рд▓рд┐рдВрдХ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдФрд░ рд╡рд┐рдХрд▓рд╛рдВрдЧ рдЬрд╝реЛрди рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдШрдЯрдХ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
@Component({...}) export class AssetPricerComponent { @observed() price$: Observable<string>; @observed() trend$: Observable<Trend>;
рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рджреЛ рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
price
(рд╕рдВрдкрддреНрддрд┐ рдХреА рдХреАрдордд рдпрд╣рд╛рдВ рд╕реНрдерд┐рдд рд╣реЛрдЧреА) рдФрд░
trend
(рдпрд╣ рдЪрд░ рдореВрд▓реНрдп рдкрд░рд┐рд╡рд░реНрддрди рдХреА рджрд┐рд╢рд╛ рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрддреЗ рд╣реБрдП рдорд╛рди
up
,
stale
рдФрд░
down
рд▓реЗ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)ред рдореИрдВрдиреЗ рдЙрдиреНрд╣реЗрдВ
@observed
рд╕рдЬрд╛рдпрд╛ред
тЦН рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдВрдбрд▓ рдЖрдХрд╛рд░
рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рдЬрд╝рд░рд╛ рджреЗрдЦреЗрдВ рдХрд┐ рдЬрд╝реЛрди рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХреЗ рджреМрд░рд╛рди рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдВрдбрд▓ рдХрд╛ рдЖрдХрд╛рд░ рдХрд┐рддрдирд╛ рдХрдо рд╣реЛ рдЧрдпрд╛ рд╣реИред рдиреАрдЪреЗ рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреА рдпреЛрдЬрдирд╛ рд╣реИред
Zone.js рдХреЗ рд╕рд╛рде рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдкрд░рд┐рдгрд╛рдордФрд░ рдпрд╣рд╛рдБ рдХреНрд╖реЗрддреНрд░ рдХреЗ рдмрд┐рдирд╛ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рд╣реИред
рдмрд┐рдирд╛ рдЬрд╝реЛрди рдХреЗ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдкрд░рд┐рдгрд╛рдоред рдЬреЗрдПрд╕polyfills-es2015.xxx.js
рдкрд░ рдзреНрдпрд╛рди
polyfills-es2015.xxx.js
ред рдпрджрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЬрд╝реЛрди.рдЬреЗрдПрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдЖрдХрд╛рд░ рд▓рдЧрднрдЧ 35 Kb рд╣реИред рд▓реЗрдХрд┐рди рдмрд┐рдирд╛ рдЬрд╝реЛрди.рдЬреЗрдПрд╕ - рдХреЗрд╡рд▓ 130 рдмрд╛рдЗрдЯреНрд╕ред
тЦНNachalnaya рд▓реЛрдб рд╣реЛ рд░рд╣рд╛ рд╣реИ
рдореИрдВрдиреЗ рд▓рд╛рдЗрдЯрд╣рд╛рдЙрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рджреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдкрд░ рд╢реЛрдз рдХрд┐рдпрд╛ред рдЗрд╕ рдЕрдзреНрдпрдпрди рдХреЗ рдкрд░рд┐рдгрд╛рдо рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рд╣реИрдВред рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдореИрдВ рдЙрдиреНрд╣реЗрдВ рдмрд╣реБрдд рдЧрдВрднреАрд░рддрд╛ рд╕реЗ рдирд╣реАрдВ рд▓реВрдВрдЧрд╛ред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдФрд╕рдд рдореВрд▓реНрдпреЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реБрдП, рдореБрдЭреЗ рдПрдХ рд╣реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдХрдИ рдорд╛рдк рдкреНрд░рджрд░реНрд╢рди рдХрд░рдХреЗ рдХрд╛рдлреА рдЕрд▓рдЧ рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓реЗред
рд╢рд╛рдпрдж рджреЛ рдЖрд╡реЗрджрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рдореВрд▓реНрдпрд╛рдВрдХрди рдореЗрдВ рдЕрдВрддрд░ рдХреЗрд╡рд▓ рдмрдВрдбрд▓реЛрдВ рдХреЗ рдЖрдХрд╛рд░ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред
рддреЛ, рдпрд╣рд╛рдБ рдПрдХ рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИред
рдЬреЛрди.js рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдкрд░рд┐рдгрд╛рдордФрд░ рдпрд╣рд╛рдБ рдЙрд╕ рдХреНрд╖реЗрддреНрд░ рдХреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдХреНрдпрд╛ рд╣реБрдЖ рд╣реИред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдПрдХ рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдгрд╛рдо рд╣реИ рдЬреЛ рдЬрд╝реЛрдиред рдЬреЗрдПрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИтЦН рдкреНрд░рджрд░реНрд╢рди
рдФрд░ рдЕрдм рд╣рдо рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛ рдЧрдПред рдпрд╣ рд▓реЛрдб рдХреЗ рддрд╣рдд рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рд╣реИред рд╣рдо рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╕реАрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЬрдм рдкреНрд░реЛрд╕реЗрд╕рд░ рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рд╕реИрдХрдбрд╝реЛрдВ рдкрд░рд┐рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдореВрд▓реНрдп рдЕрдкрдбреЗрдЯ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ рддреЛ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреИрд╕рд╛ рдорд╣рд╕реВрд╕ рдХрд░рддрд╛ рд╣реИред
рдЖрд╡реЗрджрди рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ 100 рдЗрдХрд╛рдЗрдпрд╛рдБ рдмрдирд╛рдИрдВ рдЬреЛ рд╣рд░ 250 рдПрдордПрд╕ рдХреЛ рдмрджрд▓рдиреЗ рд╡рд╛рд▓реА рдХреАрдорддреЛрдВ рдкрд░ рд╕рд╢рд░реНрдд рдбреЗрдЯрд╛ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИрдВред рдпрджрд┐ рдХреАрдордд рдмрдврд╝рддреА рд╣реИ, рддреЛ рдЗрд╕реЗ рд╣рд░реЗ рд░рдВрдЧ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдЧрд░ рдХрдо рд╣реЛ - рд▓рд╛рд▓ред рдпрд╣ рд╕рдм рдореЗрд░реЗ рдореИрдХрдмреБрдХ рдкреНрд░реЛ рдХреЛ рдЧрдВрднреАрд░рддрд╛ рд╕реЗ рд▓реЛрдб рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдбреЗрдЯрд╛ рдЯреБрдХрдбрд╝реЛрдВ рдХреЗ рдЙрдЪреНрдЪ рдЖрд╡реГрддреНрддрд┐ рд╕рдВрдЪрд░рдг рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдП рдЧрдП рдХрдИ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдкрд░ рд╡рд┐рддреНрддреАрдп рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп, рдореИрдВ рдХрдИ рдмрд╛рд░ рдПрдХ рд╕рдорд╛рди рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЖрдпрд╛ рд╣реВрдВред
рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░реЛрд╕реЗрд╕рд░ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВ, рдореИрдВрдиреЗ рдХреНрд░реЛрдо рдбреЗрд╡рд▓рдкрд░ рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред
рдпрд╣рд╛рдБ рдкрд░ рдЬреЛ рдПрдкреНрд▓реАрдХреЗрд╢рди рд╣реИ рдЬреЛ Zone.js. рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рд╡рд╣ рджрд┐рдЦрддрд╛ рд╣реИ
System.js рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╕рд┐рд╕реНрдЯрдо рд▓реЛрдбрдФрд░ рдпрд╣рд╛рдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд┐рд╕ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдХрд┐рд╕реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╕рд┐рд╕реНрдЯрдо рд▓реЛрдб рдЬреЛ рдЬрд╝реЛрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИрд╣рдо рдЗрди рдкрд░рд┐рдгрд╛рдореЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддреЗ рд╣реИрдВ, рдкреНрд░реЛрд╕реЗрд╕рд░ рд▓реЛрдб рдЧреНрд░рд╛рдл (рдкреАрд▓рд╛) рдкрд░ рдзреНрдпрд╛рди рджреЗрддреЗ рд╣реИрдВ:
- рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЬреЛ рдЬрд╝реЛрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рд▓рдЧрд╛рддрд╛рд░ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛ 70-100% рддрдХ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ! рдпрджрд┐ рдЖрдк рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдЗрд╕ рддрд░рд╣ рдХрд╛ рд▓реЛрдб рдмрдирд╛рдХрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЯреИрдм рдХреЛ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЦреБрд▓рд╛ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕рдореЗрдВ рдЪрд▓ рд░рд╣рд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╡рд┐рдлрд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
- рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг рдЬрд╣рд╛рдВ рдЬрд╝реЛрдиред рдЬреЗрдПрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, 30 рд╕реЗ 40% рдХреА рд╕реАрдорд╛ рдореЗрдВ рдкреНрд░реЛрд╕реЗрд╕рд░ рдкрд░ рдПрдХ рд╕реНрдерд┐рд░ рднрд╛рд░ рдмрдирд╛рддрд╛ рд╣реИред рдЕрджреНрднреБрдд!
рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпреЗ рдкрд░рд┐рдгрд╛рдо рдХреНрд░реЛрдо рдбреЗрд╡рд▓рдкрд░ рдЯреВрд▓ рд╡рд┐рдВрдбреЛ рдХреЗ рд╕рд╛рде рдЦреБрд▓реЗ рдереЗ, рдЬреЛ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдПрдХ рджрдмрд╛рд╡ рдбрд╛рд▓рддрд╛ рд╣реИ рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдзреАрдорд╛ рдХрд░ рджреЗрддрд╛ рд╣реИред
тЦН рднрд╛рд░ рд╡реГрджреНрдзрд┐
рдореИрдВрдиреЗ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдХрд┐ рдореВрд▓реНрдп рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рдкреНрд░рддреНрдпреЗрдХ рдЗрдХрд╛рдИ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрддреНрдкрд╛рджрди рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд╣рд░ рдкрд▓ 4 рдФрд░ рдЕрдкрдбреЗрдЯ рдЬрд╛рд░реА рдХрд░реЗрдЧреАред
рдпрд╣рд╛рдБ рд╣рдо рдЙрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реЗ рдЬрд┐рд╕рдореЗрдВ рдЬрд╝реЛрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
- рдпрд╣ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд▓реЛрдб рдХреЗ рд╕рд╛рде рдЖрддрд╛ рд╣реИ, рдЕрдм рд▓рдЧрднрдЧ 50% рдкреНрд░реЛрд╕реЗрд╕рд░ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИред
- рд╡рд╣ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдореЗрдВ рд╕рдлрд▓ рд░рд╣рд╛, рдЬрд┐рддрдирд╛ рдХрд┐ рдЬреЛрди.рдЬреЗрдПрд╕ рдХреЗ рд╕рд╛рде рдЕрдиреБрдкреНрд░рдпреЛрдЧ, рддрднреА рдЬрдм рдХреАрдорддреЛрдВ рдХреЛ рд╣рд░ 10 рдПрдордПрд╕ (рдирдП рдбреЗрдЯрд╛, рдкрд╣рд▓реЗ рдХреА рддрд░рд╣, 100 рд╕рдВрд╕реНрдерд╛рдУрдВ рд╕реЗ рдЖрдП) рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
тЦН рдХреЛрдгреАрдп рдмреЗрдВрдЪрдкреНрд░реЗрд╕ рдХреЗ рд╕рд╛рде рдкреНрд░рджрд░реНрд╢рди рд╡рд┐рд╢реНрд▓реЗрд╖рдг
рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдКрдкрд░ рдХрд┐рдП рдЧрдП рдкреНрд░рджрд░реНрд╢рди рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╡реИрдЬреНрдЮрд╛рдирд┐рдХ рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╡рд┐рднрд┐рдиреНрди рдЪреМрдЦрдЯреЗ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдЕрдзрд┐рдХ рдЧрдВрднреАрд░ рдЕрдзреНрдпрдпрди рдХреЗ рд▓рд┐рдП, рдореИрдВ
рдЗрд╕ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ
рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣
рджреВрдВрдЧрд╛ ред рдЕрдиреБрд╕рдВрдзрд╛рди рдХреЗ рд▓рд┐рдП, рдХреЛрдгреАрдп рдХреЛ рдЗрд╕ рдврд╛рдВрдЪреЗ рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрд╕реНрдХрд░рдг рдФрд░ рдмрд┐рдирд╛ рдЬрд╝реЛрди рдХреЗ рдЗрд╕рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЪрдпрди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдореИрдВрдиреЗ, рдЗрд╕ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХреЗ рдХреБрдЫ рд╡рд┐рдЪрд╛рд░реЛрдВ рд╕реЗ рдкреНрд░реЗрд░рд┐рдд рд╣реЛрдХрд░, рдПрдХ
рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдпрд╛, рдЬреЛ рднрд╛рд░реА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИред рдореИрдВрдиреЗ
рдПрдВрдЧреБрд▓рд░ рдмреЗрдВрдЪрдкреНрд░реЗрд╕ рдХреЗ рд╕рд╛рде рдЗрд╕рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ред
рдпрд╣рд╛рдБ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдП рдЧрдП рдШрдЯрдХ рдХрд╛ рдХреЛрдб рд╣реИ:
@Component({...}) export class AppComponent { public data = []; @observed() run(length: number) { this.clear(); this.buildData(length); } @observed() append(length: number) { this.buildData(length); } @observed() removeAll() { this.clear(); } @observed() remove(item) { for (let i = 0, l = this.data.length; i < l; i++) { if (this.data[i].id === item.id) { this.data.splice(i, 1); break; } } } trackById(item) { return item.id; } private clear() { this.data = []; } private buildData(length: number) { const start = this.data.length; const end = start + length; for (let n = start; n <= end; n++) { this.data.push({ id: n, label: Math.random() }); } } }
рдореИрдВрдиреЗ рдкреНрд░реЛрдЯреНрд░реИрдХреНрдЯрд░ рдФрд░ рдмреЗрдВрдЪрдкреНрд░реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХрд╛ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рд╕реЗрдЯ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ред рд╕рдВрдЪрд╛рд▓рди рдХрдИ рдмрд╛рд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдХрд┐рдП рдЧрдП рдереЗред
рдХрд╛рд░реНрд░рд╡рд╛рдИ рдореЗрдВ рдмреЗрдВрдЪрдорд╛рд░реНрдХрдкрд░рд┐рдгрд╛рдо
рдпрд╣рд╛рдБ Benchpress рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдкрд░рд┐рдгрд╛рдореЛрдВ рдХрд╛ рдПрдХ рдирдореВрдирд╛ рд╣реИред
рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдкрд░рд┐рдгрд╛рдордЗрд╕ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рд╕рдВрдХреЗрддрдХреЛрдВ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
gcAmount
: gc рдСрдкрд░реЗрд╢рдВрд╕ рд╡реЙрд▓реНрдпреВрдо (рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣), KbgcTime
: рдЬреАрд╕реА рдСрдкрд░реЗрд╢рди рд╕рдордп, рдПрдордПрд╕редmajorGcTime
: рдореБрдЦреНрдп рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рд╕рдордп gc, msредpureScriptTime
: рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп рдПрдордПрд╕ рдореЗрдВ, рдЬреАрд╕реА рд╕рдВрдЪрд╛рд▓рди рдФрд░ рдкреНрд░рддрд┐рдкрд╛рджрди рдХреЛ рдЫреЛрдбрд╝рдХрд░ред- рд░реЗрдВрдбрд░ рдЯрд╛рдЗрдо: рд░реЗрдВрдбрд░рд┐рдВрдЧ рдЯрд╛рдЗрдо,
renderTime
scriptTime
: рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП рдЬреАрд╕реА рд╕рдВрдЪрд╛рд▓рди рдФрд░ рдкреНрд░рддрд┐рдкрд╛рджрдиред
рдЕрдм рд╣рдо рдЖрд╡реЗрджрди рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рдХреБрдЫ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред рдЧреНрд░реАрди рдПрдХ рдЖрд╡реЗрджрди рдХреЗ рдкрд░рд┐рдгрд╛рдо рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдЬреЛ рдЬрд╝реЛрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдирд╛рд░рдВрдЧреА, рдЬрд╝реЛрди рдХреЗ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рдкрд░рд┐рдгрд╛рдо рджрд┐рдЦрд╛рддрд╛ рд╣реИред рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдХреЗрд╡рд▓ рд░реЗрдВрдбрд░рд┐рдВрдЧ рд╕рдордп рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдпрд╣рд╛рдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рд╕рднреА рдкрд░реАрдХреНрд╖рд╛ рдкрд░рд┐рдгрд╛рдореЛрдВ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ
рдпрд╣рд╛рдВ рджреЗрдЦреЗрдВ ред
рдЯреЗрд╕реНрдЯ: 1000 рд▓рд╛рдЗрдиреЗрдВ рдмрдирд╛рдирд╛
рдкрд╣рд▓реЗ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ, 1000 рд▓рд╛рдЗрдиреЗрдВ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИрдВред
рдкрд░реАрдХреНрд╖рдг рдХреЗ рдкрд░рд┐рдгрд╛рдордЯреЗрд╕реНрдЯ: 10,000 рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг
рдЬреИрд╕рд╛ рдХрд┐ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдкрд░ рднрд╛рд░ рдмрдврд╝рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЙрдирдХреЗ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рдЕрдВрддрд░ рд╣реЛрддрд╛ рд╣реИред
рдкрд░реАрдХреНрд╖рдг рдХреЗ рдкрд░рд┐рдгрд╛рдордЯреЗрд╕реНрдЯ: 1000 рд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВ
рдЗрд╕ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ, 1000 рд▓рд╛рдЗрдиреЛрдВ рдХреЛ 10,000 рд▓рд╛рдЗрдиреЛрдВ рд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред
рдкрд░реАрдХреНрд╖рдг рдХреЗ рдкрд░рд┐рдгрд╛рдордЯреЗрд╕реНрдЯ: 10,000 рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рд╣рдЯрд╛рдирд╛
рдпрд╣рд╛рдВ, 10,000 рд▓рд╛рдЗрдиреЗрдВ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рддрдм рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдкрд░реАрдХреНрд╖рдг рдХреЗ рдкрд░рд┐рдгрд╛рдордЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдбреЗрдХреЛрд░реЗрдЯрд░ рд╕реЛрд░реНрд╕ рдХреЛрдб
рдиреАрдЪреЗ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдбреЗрдХреЛрд░реЗрдЯрд░ рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб рд╣реИред рдпрд╣ рдХреЛрдб рднреА
рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛
рд╣реИ ред
рдкрд░рд┐рдгрд╛рдо
рд╣рд╛рд▓рд╛рдБрдХрд┐ рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдк рдХреЛрдгреАрдп рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореЗрд░реА рдХрд╣рд╛рдиреА рдкрд╕рдВрдж рдЖрдИ рд╣реЛрдЧреА, рдореБрдЭреЗ рдпрд╣ рднреА рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдореИрдВ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗ рдЬрд╝реЛрди рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд▓реНрджрдмрд╛рдЬрд╝реА рдирд╣реАрдВ рдХрд░реВрдБрдЧрд╛ред рдпрд╣рд╛рдВ рд╡рд░реНрдгрд┐рдд рд░рдгрдиреАрддрд┐ рдмрд╣реБрдд рд╣реА рдЕрдВрддрд┐рдо рдЙрдкрд╛рдп рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рддрд╛рдХрд┐ рдЖрдк рдЕрдкрдиреЗ рдХреЛрдгреАрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣рд╛рд░рд╛ рд▓реЗ рд╕рдХреЗрдВред
рдкрд╣рд▓реЗ рдЖрдкрдХреЛ
trackBy
рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рд░рдгрдиреАрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ,
trackBy
рд▓рд╛рдЧреВ рдХрд░рдиреЗ, рдШрдЯрдХреЛрдВ рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдиреЗ, рдЬрд╝реЛрди рдХреЗ рдмрд╛рд╣рд░ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ, рдЬрд╝реЛрди .js рдШрдЯрдирд╛рдУрдВ рдХреЛ рдмреНрд▓реИрдХрд▓рд┐рд╕реНрдЯ рдХрд░рдиреЗ (рдЕрдиреБрдХреВрд▓рди рд╡рд┐рдзрд┐рдпреЛрдВ рдХреА рд╕реВрдЪреА рдЬрд╛рд░реА рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣рд╛рдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛рдлреА рдорд╣рдВрдЧрд╛ рд╣реИ, рдФрд░ рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рд░ рдХреЛрдИ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рдЗрддрдиреА рдЕрдзрд┐рдХ рдХреАрдордд рджреЗрдиреЗ рдХреЛ рддреИрдпрд╛рд░ рд╣реЛрдЧрд╛ред
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЬрд╝реЛрди рдХреЗ рдмрд┐рдирд╛ рд╡рд┐рдХрд╛рд╕ рд╕рдмрд╕реЗ рдЖрдХрд░реНрд╖рдХ рдЪреАрдЬ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИред рд╢рд╛рдпрдж рдпрд╣ рдХреЗрд╡рд▓ рдЙрд╕ рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реИ рдЬреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЬреЛ рдЙрд╕рдХреЗ рдкреВрд░реНрдг рдирд┐рдпрдВрддреНрд░рдг рдореЗрдВ рд╣реИред рд╡рд╣ рд╣реИ - рдпрд╣ рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рд╕реНрд╡рд╛рдореА рд╣реИ рдФрд░ рд╣рд░ рдЪреАрдЬ рдХреЛ рдЙрд╕рдХреЗ рдЙрдЪрд┐рдд рд░реВрдк рдореЗрдВ рд▓рд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдФрд░ рд╕рдордп рд╣реИред
рдпрджрд┐ рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдЖрдкрдиреЗ рд╕рдм рдХреБрдЫ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдФрд░ рдорд╛рдирд╛ рдХрд┐ рдЖрдкрдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдЕрдбрд╝рдЪрди рдареАрдХ рдЬреЛрди.рдЬреЗрдПрд╕ рд╣реИ, рддреЛ рд╢рд╛рдпрдж рдЖрдкрдХреЛ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХрд╛ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдкрддрд╛ рд▓рдЧрд╛рдХрд░ рдПрдВрдЧреБрд▓рд░ рдХреЛ рдЧрддрд┐ рджреЗрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред
рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЗрд╕ рд▓реЗрдЦ рдиреЗ рдЖрдкрдХреЛ рдпрд╣ рджреЗрдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреА рдХрд┐ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдХреЛрдгреАрдп рдХреНрдпрд╛ рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реИ, рдЖрдЗрд╡реА рдХреНрдпрд╛ рд╕рдХреНрд╖рдо рд╣реИ, рдФрд░ рдЖрд╡реЗрджрди рдХреА рдЧрддрд┐ рдХреЛ рдЕрдзрд┐рдХрддрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╝реЛрди.рдЬреЗрдПрд╕ рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдкреНрд░рд┐рдп рдкрд╛рдардХреЛрдВ! рдЖрдк рдЕрдкрдиреА рдХреЛрдгреАрдп рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рдХреИрд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЕрдзрд┐рдХрддрдо рдкреНрд░рджрд░реНрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ?
