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

рдбреЗрдЯрд╛-рдЕрдЬреНрдЮреЗрдп рдШрдЯрдХ
рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдо рдбреНрд░реЙрдк-рдбрд╛рдЙрди рдореЗрдиреВ рдХреЗ рд╕рд╛рде рдПрдХ рдмрдЯрди рдмрдирд╛рддреЗ рд╣реИрдВред рдЗрд╕рдХрд╛ API рдХреНрдпрд╛ рд╣реЛрдЧрд╛? рдмреЗрд╢рдХ, рдЙрд╕реЗ рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдХреБрдЫ рд╡рд╕реНрддреБрдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рдореЗрдиреВ рдЖрдЗрдЯрдо рдХреА рдПрдХ рд╕рд░рдгреАред рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдкрд╣рд▓рд╛ рд╕рдВрд╕реНрдХрд░рдг рдЗрд╕ рддрд░рд╣ рд╣реЛрдЧрд╛:
interface MenuItem { readonly text: string; readonly onClick(): void; }
рдмрд╣реБрдд рдЬрд▓реНрджреА, disabled: boolean
рдЬреЛрдбрд╝ рджреЗрдЧрд╛ред рдлрд┐рд░ рдбрд┐рдЬрд╛рдЗрдирд░ рдЖрдПрдВрдЧреЗ рдФрд░ рдЖрдЗрдХрди рдХреЗ рд╕рд╛рде рдПрдХ рдореЗрдиреВ рддреИрдпрд╛рд░ рдХрд░реЗрдВрдЧреЗред рдФрд░ рдкрдбрд╝реЛрд╕реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓реЛрдЧ, рд╡реЗ рджреВрд╕рд░реА рдУрд░ рдЖрдЗрдХрди рдмрдирд╛рдПрдВрдЧреЗред рдФрд░ рдЕрдм рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрдврд╝ рд░рд╣рд╛ рд╣реИ, рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЛрдВ рдХреЛ рдХрд╡рд░ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдФрд░ рдЭрдВрдбреЗ рдХреА рдмрд╣реБрддрд╛рдпрдд рд╕реЗ рдШрдЯрдХ рд╕рдВрдпреБрдХреНрдд рд░рд╛рд╖реНрдЯреНрд░ рдХреА рд╕рднрд╛ рд╕реЗ рдорд┐рд▓рдирд╛ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред

рдкреАрдврд╝реА рдмрдЪрд╛рд╡ рдореЗрдВ рдЖрддреА рд╣реИред рдпрджрд┐ рдЖрдк рдШрдЯрдХ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдпрд╣ рдбреЗрдЯрд╛ рдореЙрдбрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд░рд╡рд╛рд╣ рди рдХрд░реЗ, рддреЛ рдпреЗ рд╕рднреА рд╕рдорд╕реНрдпрд╛рдПрдВ рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рдПрдВрдЧреАред рдПрдХ рдХреНрд▓рд┐рдХ рдкрд░ item.onClick
рдкрд░ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдореЗрдиреВ рдХреЗрд╡рд▓ рдХреНрд▓рд┐рдХ рдХрд┐рдП рдЧрдП рдЖрдЗрдЯрдо рдХреЛ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓ рджреЗрдЧрд╛ред рдмрд╛рдж рдореЗрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ рдпрд╣ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рд░реНрдп рд╣реИред рднрд▓реЗ рд╣реА рд╡реЗ рдПрдХ рд╣реА item.onClick
ред
рдПрдХ disabled
рд░рд╛рдЬреНрдп рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд┐рд╢реЗрд╖ рд╣реИрдВрдбрд▓рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред disabledItemHandler: (item: T) => boolean
рдЗрдЯрд╣реИрдВрдбрд▓рд░ рд╡рд┐рдзрд┐ рдХреЛ рдШрдЯрдХ рдХреЛ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ disabledItemHandler: (item: T) => boolean
, рдЬрд┐рд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдЖрдЗрдЯрдо рдЪрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкрд░рд┐рдгрд╛рдо рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рддрддреНрд╡ рдмрдВрдж рд╣реИред

рдпрджрд┐ рдЖрдк рдПрдХ рдХреЙрдореНрдмреЛ рдмреЙрдХреНрд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рджрд┐рдорд╛рдЧ рдореЗрдВ рдЖ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдФрд░ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдордирдорд╛рдирд╛ рдореВрд▓реНрдп рд░рдЦрддрд╛ рд╣реИ рдЬреЛ рдХреЛрдб рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд╡рд┐рдЪрд╛рд░ рд╕реНрдкрд╖реНрдЯ рд╣реИред рдЖрдЦрд┐рд░рдХрд╛рд░, рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрд╛рда рдЯрд╛рдЗрдк рдХрд░рддрд╛ рд╣реИ, рддреЛ рдХреЙрдореНрдмреЛ рдмреЙрдХреНрд╕ рдХреЛ рджрд░реНрдЬ рд▓рд╛рдЗрди рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
interface ComboBoxItem { readonly text: string; readonly value: any; }
рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рднреА, рдЗрд╕ рддрд░рд╣ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рд╕реАрдорд╛рдПрдВ рд╕рд╛рдордиреЗ рдЖрдПрдВрдЧреА - рдЬреИрд╕реЗ рд╣реА рдПрдХ рдбрд┐рдЬрд╛рдЗрди рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд▓рд╛рдЗрди рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдлреЙрд░реНрдо рдореЗрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдореВрд▓реНрдп рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдЖрд╡рд░рдг рд╣реЛрдЧрд╛, рдЦреЛрдЬ рд╣рдореЗрд╢рд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рджреНрд╡рд╛рд░рд╛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдлреЛрди рдирдВрдмрд░ рдореЗрдВ рдбреНрд░рд╛рдЗрд╡ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдирд╛рдо рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП)ред рдФрд░ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рдЕрдиреНрдп рдШрдЯрдХреЛрдВ рдХреЗ рдЖрдЧрдорди рдХреЗ рд╕рд╛рде рдмрдврд╝реЗрдЧреА, рднрд▓реЗ рд╣реА рдЙрдирдХреЗ рддрд╣рдд рдбреЗрдЯрд╛ рдореЙрдбрд▓ рд╕рдорд╛рди рд╣реЛред
рдЬреЗрдирд░рд┐рдХ рдФрд░ рд╣реИрдВрдбрд▓рд░ рднреА рдпрд╣рд╛рдВ рдорджрдж рдХрд░реЗрдВрдЧреЗред рдЖрдЗрдП рд╣рдо рдлрд╝рдВрдХреНрд╢рди (item: T) => string
рдХрдВрдкреЛрдиреЗрдВрдЯ рдХреЛ рджреЗрддреЗ рд╣реИрдВред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди item => String(item)
ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЖрдк рдЙрдирдореЗрдВ toString()
рдкрджреНрдзрддрд┐ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдХреЗ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рди рдХреЗрд╡рд▓ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рджреНрд╡рд╛рд░рд╛ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рд╣реИрдВрдбрд▓рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рдорд╛рдорд▓рд╛ рд╣реИред рдЖрдк рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдПрдХ рдШрдЯрдХ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЦреЛрдЬ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдФрд░ рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рддрддреНрд╡ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред рдпрд╣ boolean
рд▓реМрдЯрд╛рдПрдЧрд╛ - рдпрд╣ рдмрддрд╛рдПрдЧрд╛ рдХрд┐ рдЖрдЗрдЯрдо рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИ рдпрд╛ рдирд╣реАрдВред
рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рдЙрджрд╛рд╣рд░рдг рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рдЖрдИрдбреА рд╣реИ, рдЬреЛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреА рдкреНрд░рддрд┐рдпреЛрдВ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИред рдЬрдм рд╣рдореЗрдВ рддреБрд░рдВрдд рдлреЙрд░реНрдо рдореВрд▓реНрдп рдкреНрд░рд╛рдкреНрдд рд╣реБрдЖ, рдФрд░ рдЪрдпрди рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд▓реНрдк рд╕рд░реНрд╡рд░ рд╕реЗ рдПрдХ рдЕрд▓рдЧ рдЕрдиреБрд░реЛрдз рдореЗрдВ рдЖрдП - рдЙрдирдХреЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ рд╡рд░реНрддрдорд╛рди рддрддреНрд╡ рдХреА рдПрдХ рдкреНрд░рддрд┐ рд╣реЛрдЧреАред рдпрд╣ рдХрд╛рд░реНрдп рдПрдХ рд╣реИрдВрдбрд▓рд░ рджреНрд╡рд╛рд░рд╛ рд╕рдВрднрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рджреЛ рддрддреНрд╡ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрдирдХреА рд╕рдорд╛рдирддрд╛ рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рддреБрд▓рдирд╛ рд╕рд╛рдорд╛рдиреНрдп рд╣реИ ===
ред
рдЯреИрдм рдбрд┐рд╕реНрдкреНрд▓реЗ рдШрдЯрдХ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдЬрд╛рдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЯреИрдм рдХрд┐рд╕ рд░реВрдк рдореЗрдВ рдЗрд╕реЗ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛: рдХрдо рд╕реЗ рдХрдо рдкрд╛рда рдХреЗ рд╕рд╛рде, рдХрдо рд╕реЗ рдХрдо рдЕрддрд┐рд░рд┐рдХреНрдд рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд╕реНрддреБ рдХреЗ рд╕рд╛рде, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдХреИрд╕реЗред рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд░реВрдк рдХрд╛ рдЬреНрдЮрд╛рди рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдХрдИ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рд╛рд░реВрдк рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХ рдмрдирд╛рддреЗ рд╣реИрдВред рд╕рдВрдмрдВрдзреЛрдВ рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдШрдЯрдХреЛрдВ рдХреЛ рд╢реЛрдзрди рдХреЗ рджреМрд░рд╛рди рдЯреВрдЯрдиреЗ рд╡рд╛рд▓реЗ рдмрджрд▓рд╛рд╡реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреА, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЙрдирдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдбреЗрдЯрд╛ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рдФрд░ рд▓реЗрдЧреЛ рдХреНрдпреВрдмреНрд╕ рдЬреИрд╕реЗ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рдкрд░рдорд╛рдгреБ рдШрдЯрдХреЛрдВ рдХреЗ рд╕рдВрдпреЛрдЬрди рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред
рдЖрдЗрдЯрдо рдХрд╛ рдПрдХ рд╣реА рд╡рд┐рдХрд▓реНрдк рд╕рдВрджрд░реНрдн рдореЗрдиреВ рдФрд░ рдХреЙрдореНрдмреЛрдХреНрд╕ рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИ, рдЪрдпрди, рдмрд╣реБ-рдЪрдпрди, рд╕рд░рд▓ рдШрдЯрдХреЛрдВ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдбрд┐рдЬрд╛рдЗрдиреЛрдВ рдореЗрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЖрдкрдХреЛ рдХрд┐рд╕реА рддрд░рд╣ рд╕реЗ рдордирдорд╛рдирд╛ рдбреЗрдЯрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

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

рдордирдорд╛рдирд╛ рдбреЗрдЯрд╛ рдкрд╛рдиреА рдХреА рддрд░рд╣ рд╣реИ: рдЙрдирдХреЗ рдкрд╛рд╕ рдХреЛрдИ рд░реВрдк рдирд╣реАрдВ рд╣реИ, рд╡реЗ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдХреБрдЫ рдЦрд╛рд╕ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рд╣рдорд╛рд░рд╛ рдХрд╛рд░реНрдп рдЙрдирдХреЗ рд▓рд┐рдП рдПрдХ "рдкреЛрдд" рд╕реЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рд╣реИред рдЗрд╕ рдЕрд░реНрде рдореЗрдВ, рдЙрдкрд╕реНрдерд┐рддрд┐ рд╕реЗ рдЕрд▓рдЧ рдПрдХ рдШрдЯрдХ рдХрд╛ рд╡рд┐рдХрд╛рд╕ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ:

рдШрдЯрдХ рдЖрд╡рд╢реНрдпрдХ рдЖрдХрд╛рд░ рдХрд╛ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╢реЗрд▓реНрдл рд╣реИ, рдФрд░ рд╕рд╛рдордЧреНрд░реА рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╕реНрдЯрдо рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ "рдЗрд╕реЗ" рдкрд░ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рдорд╛рдирдХ рд╡рд┐рдзрд┐, рдЬреИрд╕реЗ рдХрд┐ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рдирд╛, рд╢реБрд░реВ рдореЗрдВ рдШрдЯрдХ рдореЗрдВ рд░рдЦреА рдЧрдИ рд╣реИ, рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмрд╛рд╣рд░ рд╕реЗ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╡рд┐рдХрд▓реНрдк рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЖрдЗрдП рдПрдХ рдирдЬрд░ рдбрд╛рд▓рддреЗ рд╣реИрдВ рдЙрди рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдкрд░ рдЬреЛ рдПрдВрдЧреБрд▓рд░ рдХреЗ рдкрд╛рд╕ рд╣реИред
рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЛ рдмрджрд▓рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рд╕рд░рд▓ рддрд░реАрдХрд╛ рд▓рд╛рдЗрди рдкреНрд░рдХреНрд╖реЗрдк рд╣реИред рд▓реЗрдХрд┐рди рдореЗрдиреВ рдЖрдЗрдЯрдо рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрджреГрд╢реНрдп рд░реЗрдЦрд╛ рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкреНрд░рддреНрдпреЗрдХ рдЖрдЗрдЯрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рд╣реИ - рдФрд░ рд╡реЗ рд╕рднреА рд╕рдорд╛рди рджрд┐рдЦреЗрдВрдЧреЗред рдПрдХ рд╕реНрдерд┐рд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕рдВрджрд░реНрдн рд╕реЗ рд╡рдВрдЪрд┐рдд рд╣реИ ред рд▓реЗрдХрд┐рди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рд╕реВрдЪреА рдЦрд╛рд▓реА рд╣реЛрдиреЗ рдкрд░ "рдХреБрдЫ рднреА рдирд╣реАрдВ рдорд┐рд▓рд╛" рдкрд╛рда рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдХрд╛рдлреА рдЙрдкрдпреБрдХреНрдд рд╣реИред
<div>{{content}}</div>
рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдордирдорд╛рдиреЗ рдбреЗрдЯрд╛ рдХреЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рдЪреБрдХреЗ рд╣реИрдВред рдкрд░рд┐рдгрд╛рдо рднреА рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрдирдкреБрдЯ рдореВрд▓реНрдп рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд╕рдВрджрд░реНрдн рдПрдХ рд╕реВрдЪреА рдЖрдЗрдЯрдо рд╣реЛрдЧрд╛ред рдпрд╣ рдПрдХ рдЕрдзрд┐рдХ рд▓рдЪреАрд▓рд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдкрд░рд┐рдгрд╛рдо рдХреЛ рд╕реНрдЯрд╛рдЗрд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ - рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ HTML рдореЗрдВ рдкреНрд░рдХреНрд╖реЗрдкрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдФрд░ рдЗрд╕рд╕реЗ рднреА рдЕрдзрд┐рдХ рдпрд╣ рдирд┐рд░реНрджреЗрд╢ рдпрд╛ рдШрдЯрдХреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрдЧрд╛ред
<div>{{content(context)}}</div>
рдХреЛрдгреАрдп *ngTemplateOutlet
рдХреЛ *ngTemplateOutlet
рдХрд░рдиреЗ рдХреЗ *ngTemplateOutlet
ng-template
рдФрд░ *ngTemplateOutlet
рд╕рдВрд░рдЪрдирд╛рддреНрдордХ рдирд┐рд░реНрджреЗрд╢ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЙрдирдХреА рдорджрдж рд╕реЗ, рд╣рдо HTML рдХреЗ рдПрдХ рдЯреБрдХрдбрд╝реЗ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рдбреЗрдЯрд╛ рдЗрдирдкреБрдЯ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдШрдЯрдХ рдХреЛ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╡рд╣рд╛рдВ рдЙрд╕реЗ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрджрд░реНрдн рдХреЗ рд╕рд╛рде рддреНрд╡рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╣рдо рдореЙрдбрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рдХрд┐рдП рдмрд┐рдирд╛ рдЕрдкрдиреЗ рддрддреНрд╡ рдкрд░ рдЗрд╕реЗ рдкрд╛рд░рд┐рдд рдХрд░реЗрдВрдЧреЗред рдЕрдкрдиреА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рдЦрд╛рдХрд╛ рдЦреАрдВрдЪрдирд╛ рд╣рдорд╛рд░реЗ рдШрдЯрдХ рдХреЗ рдЙрдкрднреЛрдХреНрддрд╛-рдбреЗрд╡рд▓рдкрд░ рдХрд╛ рдХрд╛рд░реНрдп рд╣реИред
<ng-container *ngTemplateOutlet="content; context: context"></ng-container>
рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдПрдХ рдмрд╣реБрдд рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдЙрдкрдХрд░рдг рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдХреБрдЫ рдореМрдЬреВрджрд╛ рдШрдЯрдХ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рдЗрд╕рдХреЗ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХреЛ рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рдХрд░рддрд╛ рд╣реИред рдХрднреА-рдХрднреА рдЖрд╡реЗрджрди рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╣рд┐рд╕реНрд╕реЛрдВ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╡рд┐рднрд┐рдиреНрди рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдПрдХ рд╣реА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдореЗрд░реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рдпрд╣, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирд╛рдо, рдореБрджреНрд░рд╛ рдФрд░ рд╕рдВрддреБрд▓рди рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд╕рд╛рде рдЦрд╛рддрд╛ рдЪрдпрди рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рд╣реИред

рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд░реВрдк рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЬрдЯрд┐рд▓ рддрд░реАрдХрд╛ рдЧрддрд┐рд╢реАрд▓ рдШрдЯрдХ рд╣реИред рдХреЛрдгреАрдп рдореЗрдВ, *ngComponentOutlet
рдирд┐рд░реНрджреЗрд╢ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдЙрдиреНрд╣реЗрдВ рдШреЛрд╖рд┐рдд рд░реВрдк рд╕реЗ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд╕реНрддрд┐рддреНрд╡ рдореЗрдВ рд╣реИред рдпрд╣ рд╕рдВрджрд░реНрдн рдХреЗ рд╣рд╕реНрддрд╛рдВрддрд░рдг рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ рд╣рд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИред рд╣рдо рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП рдПрдХ рдЯреЛрдХрди рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ Injector
рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдШрдЯрдХ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
<ng-container *ngComponentOutlet="content; injector: injector"></ng-container>
рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рд╕рдВрджрд░реНрдн рди рдХреЗрд╡рд▓ рд╡рд╣ рддрддреНрд╡ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рдпрд╣ рднреА рдХрд┐ рд╡рд╣ рдХрд┐рди рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИ:
<ng-template let-item let-focused="focused"> </ng-template>
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрд┐рд╕реА рдЦрд╛рддреЗ рдХреА рд╡рд╛рдкрд╕реА рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдЗрдЯрдо рдХреЗ рдлреЛрдХрд╕ рдХреА рд╕реНрдерд┐рддрд┐ рдЙрдкрд╕реНрдерд┐рддрд┐ рдореЗрдВ рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд рд╣реЛрддреА рд╣реИ - рдЖрдЗрдХрди рдХреА рдкреГрд╖реНрдарднреВрдорд┐ рдЧреНрд░реЗ рд╕реЗ рд╕рдлреЗрдж рддрдХ рдмрджрд▓ рдЬрд╛рддреА рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдпрд╣ рдЙрди рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЛ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдЬреЛ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдмрд┐рдВрджреБ рд╢рд╛рдпрдж рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдПрдХрдорд╛рддреНрд░ рд╕реАрдорд╛-рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИред

рдпреВрдирд┐рд╡рд░реНрд╕рд▓ рдЖрдЙрдЯрд▓реЗрдЯ
рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдЙрдкрдХрд░рдг рдкрд╛рдВрдЪрд╡реЗрдВ рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рдХреЛрдгреАрдп рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИрдВред рд▓реЗрдХрд┐рди рд╣рдо рдПрдХ рд╡рд┐рдХрд▓реНрдк рд╕реЗ рджреВрд╕рд░реЗ рд╡рд┐рдХрд▓реНрдк рдкрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рдЬрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдШрдЯрдХ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░реЗрдВрдЧреЗ рдЬреЛ рд╕рд╛рдордЧреНрд░реА рдФрд░ рд╕рдВрджрд░реНрдн рдХреЛ рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕ рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рддрд░реАрдХрд╛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЯрд╛рдЗрдк string
, number
, (context: T) => string | number
рдмреАрдЪ рдЕрдВрддрд░ рдХрд░рдирд╛ рд╕реАрдЦрдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ (context: T) => string | number
, TemplateRef<T>
рдФрд░ Type<any>
(рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдХреБрдЫ рдмрд╛рд░реАрдХрд┐рдпрд╛рдВ рд╣реИрдВ, рдЬрд┐рдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдо рдиреАрдЪреЗ рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВрдЧреЗ)ред
рдШрдЯрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
<ng-container [ngSwitch]="type"> <ng-container *ngSwitchCase="'primitive'">{{content}}</ng-container> <ng-container *ngSwitchCase="'function'">{{content(context)}}</ng-container> <ng-container *ngSwitchCase="'template'"> <ng-container *ngTemplateOutlet="content; context: context"></ng-container> </ng-container> <ng-container *ngSwitchCase="'component'"> <ng-container *ngComponentOutlet="content; injector: injector"></ng-container> </ng-container> </ng-container>
рдЙрдкрдпреБрдХреНрдд рд╡рд┐рдзрд┐ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреЛ рдПрдХ рдЯрд╛рдЗрдкреНрдЯрд░ рдорд┐рд▓реЗрдЧрд╛ред рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░ рд╣рдо рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдПрдХ рдШрдЯрдХ рдХреЛ рдЕрд▓рдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрд▓рд╕реА рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рд╣рдореЗрдВ рдПрдХ Injector
рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬреЛ рдШрдЯрдХ рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рд░реИрдкрд░ рдХреНрд▓рд╛рд╕ рдмрдирд╛рдПрдВрдЧреЗред рдпрд╣ рднреА рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕рдВрднрд╡ рд╣реЛ рдЬрд╛рдПрдЧрд╛ рджреНрд╡рд╛рд░рд╛ instanceof
:
export class ComponentContent<T> { constructor( readonly component: Type<T>, private readonly injector: Injector | null = null, ) {} }
рдкрд╛рд░рд┐рдд рд╕рдВрджрд░реНрдн рдХреЗ рд╕рд╛рде рдПрдХ рдЗрдВрдЬреЗрдХреНрдЯрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝реЗрдВ:
createInjectorWithContext(injector: Injector, context: C): Injector { return Injector.create({ parent: this.injector || injector, providers: [ { provide: CONTEXT, useValue: context, }, ], }); }
рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ, рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЖрдк рдЙрдирдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕рд╛ рдХрд┐ рд╣реИред рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдпрд╣ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЯреЗрдореНрдкрд▓реЗрдЯ рдЗрд╕рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рд╕реНрдерд╛рди рдкрд░ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд╕рддреНрдпрд╛рдкрди рдХреЗ рдЕрдзреАрди рд╣реИред рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рд╡реНрдпреВ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рд╕реНрдерд╛рди рд╕реЗ рдкреЗрдбрд╝ рдХреЗ рд╕рдорд╛рдирд╛рдВрддрд░ рдпрд╛ рдЙрдЪреНрдЪрддрд░ рд╣реИ, рддреЛ рдЗрд╕рдореЗрдВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдореВрд▓ рджреГрд╢реНрдп рдореЗрдВ рдирд╣реАрдВ рдЙрдард╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рди рдХреЗрд╡рд▓ рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдмрд▓реНрдХрд┐ рдПрдХ рдирд┐рд░реНрджреЗрд╢ рднреА рд╣реЛрдЧрд╛ ChangeDetectorRef
рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рд╕реНрдерд╛рди рдХреЗ ChangeDetectorRef
рднреА рд╣реЛрдЧрд╛ред рдЗрд╕ рддрд░рд╣ рд╣рдо рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдиреЗ рдкрд░ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рдЬрд╛рдБрдЪ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдмрд╣реБрд░реВрдкреА рдкреИрдЯрд░реНрди
рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рдпрд╣ рдЙрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЗрд╕рдореЗрдВ рдЖрдпрд╛ рдерд╛ред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдХреБрдЫ рд╡рд┐рд╢реЗрд╖ рдХреЗ рд▓рд┐рдП рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рдПрдХ рдШрдЯрдХ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рджреЗрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЙрд╕реА рд╕рдордп, рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЖрдкрдХреЛ рдмрд╕ рдПрдХ рдЖрдЗрдХрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЖрдк рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рддрдм рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрдм рдПрдХ рдЖрджрд┐рдо рдпрд╛ рдлрд╝рдВрдХреНрд╢рди рдЗрдирдкреБрдЯ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рддрд╛ рд╣реИред рдХрднреА-рдХрднреА рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЖрджрд┐рдо рдХрд╛ рдкреНрд░рдХрд╛рд░ рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реЛрддрд╛ рд╣реИ: рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЯреИрдм рдкрд░ рдЕрдкрдард┐рдд рд╕рдВрджреЗрд╢реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмреИрдЬ рдШрдЯрдХ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдЙрди рдкреГрд╖реНрдареЛрдВ рдХреЛ рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬрд┐рдирдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЖрдЗрдХрди рдХреЗ рд╕рд╛рде рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рдФрд░ рдЪреАрдЬрд╝ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ - рдЖрджрд┐рдо рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдкрд╛рд╕ рдХрд░рдирд╛ред рдШрдЯрдХ рдореЗрдВ @ContentChild
рдЬреЛрдбрд╝реЗрдВ, рдЬреЛ рд╕рд╛рдордЧреНрд░реА рд╕реЗ TemplateRef
рд▓реЗрддрд╛ рд╣реИред рдпрджрд┐ рдХреЛрдИ рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдПрдХ рдлрд╝рдВрдХреНрд╢рди, рд╕реНрдЯреНрд░рд┐рдВрдЧ рдпрд╛ рд╕рдВрдЦреНрдпрд╛ рд╕рд╛рдордЧреНрд░реА рдХреЛ рдкрд╛рд╕ рдХрд░ рджреА рдЬрд╛рддреА рд╣реИ, рддреЛ рд╣рдо рдЗрд╕реЗ рд╕рдВрджрд░реНрдн рдХреЗ рд░реВрдк рдореЗрдВ рдЖрджрд┐рдо рдХреЗ рд╕рд╛рде рддреНрд╡рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
<ng-container *ngSwitchCase="'interpolation'"> <ng-container *ngIf="!template; else child">{{primitive}}</ng-container> <ng-template #child> <ng-container *ngTemplateOutlet="template; context: { $implicit: primitive }" ></ng-container> </ng-template> </ng-container>
рдЕрдм рд╣рдо рдкреНрд░рдХреНрд╖реЗрдк рдХреЛ рд╕реНрдЯрд╛рдЗрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдШрдЯрдХ рдХреЛ рднреА рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
<content-outlet [content]="content" [context]="context"> <ng-template let-primitive> <div class="primitive">{{primitive}}</div> </ng-template> </content-outlet>
рдпрд╣ рд╣рдорд╛рд░реЗ рдХреЛрдб рдХреЛ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рд▓рд╛рдиреЗ рдХрд╛ рд╕рдордп рд╣реИред
рдХреЗ рдЙрдкрдпреЛрдЧ
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рджреЛ рдШрдЯрдХреЛрдВ рдХреЛ рд░реЗрдЦрд╛рдВрдХрд┐рдд рдХрд░рддреЗ рд╣реИрдВ: рдЯреИрдм рдФрд░ рдХреЙрдореНрдмреЛ рдмреЙрдХреНрд╕ ред рдЯреИрдм рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдЯреИрдм рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдВрдЯреЗрдВрдЯ-рдЖрдЙрдЯрд▓реЗрдЯ рд╣реЛрдЧрд╛, рдЬрд┐рд╕рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдкрд╛рд╕ рдХреА рдЧрдИ рд╡рд╕реНрддреБ рд╕рдВрджрд░реНрдн рд╣реЛрдЧреА:
<content-outlet *ngFor="let tab of tabs" [class.disabled]="disabledItemHandler(tab)" [content]="content" [context]="getContext(tab)" (click)="onClick(tab)" ></content-outlet>
рдЖрдкрдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╢реИрд▓реА рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдлрд╝реЙрдиреНрдЯ рдЖрдХрд╛рд░, рд╡рд░реНрддрдорд╛рди рдЯреИрдм рдХреЗ рдиреАрдЪреЗ рд░реЗрдЦрд╛рдВрдХрд┐рдд, рд░рдВрдЧред рд▓реЗрдХрд┐рди рд╣рдо рд╕рд╛рдордЧреНрд░реА рдХреЗ рд▓рд┐рдП рдареЛрд╕ рдЙрдкрд╕реНрдерд┐рддрд┐ рдЫреЛрдбрд╝ рджреЗрдВрдЧреЗред рдШрдЯрдХ рдХреЛрдб рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╣реЛрдЧрд╛:
export class TabsComponent<T> { @Input() tabs: ReadonlyArray<T> = []; @Input() content: Content = ({$implicit}) => String($implicit); @Input() disabledItemHandler: (tab: T) => boolean = () => false; @Input() activeTab: T | null = null; @Output() activeTabChange = new EventEmitter<T>(); getContext($implicit: T): IContextWithActive<T> { return { $implicit, active: $implicit === this.activeTab, }; } onClick(tab: T) { this.activeTab = tab; this.activeTabChange.emit(tab); } }
рд╣рдореЗрдВ рдПрдХ рдШрдЯрдХ рдорд┐рд▓рд╛ рдЬреЛ рдПрдХ рдордирдорд╛рдирд╛ рд╕рд░рдгреА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕реЗ рдЯреИрдм рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЖрдк рдмрд╕ рд╡рд╣рд╛рдБ рддрд╛рд░ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдореВрд▓ рд╕реНрд╡рд░реВрдк рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

рдФрд░ рдЖрдк рд╡рд╕реНрддреБрдУрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЕрдкрдиреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, HTML, рдЖрдЗрдХрди, рд╕рдВрдХреЗрддрдХ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ:

рдХреЙрдореНрдмреЛрдмреЙрдХреНрд╕ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ , рд╣рдо рдкрд╣рд▓реЗ рджреЛ рдмреБрдирд┐рдпрд╛рджреА рдШрдЯрдХ рдмрдирд╛рдПрдВрдЧреЗ, рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рд╢рд╛рдорд┐рд▓ рд╣реИ: рдПрдХ рдЖрдЗрдХрди рдФрд░ рдПрдХ рдореЗрдиреВ рдХреЗ рд╕рд╛рде рдПрдХ рдЗрдирдкреБрдЯ рдлрд╝реАрд▓реНрдбред рдЙрддреНрддрд░рд╛рд░реНрджреНрдз рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдкреЗрдВрдЯ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ - рдпрд╣ рдЯреИрдм рдХреЗ рд╕рдорд╛рди рд╣реИ, рдХреЗрд╡рд▓ рд▓рдВрдмрд╡рдд рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдЕрдиреНрдп рдореВрд▓ рд╢реИрд▓рд┐рдпрд╛рдБ рд╣реИрдВред рдФрд░ рдЗрдирдкреБрдЯ рдлрд╝реАрд▓реНрдб рдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
<input #input [(ngModel)]="value"/> <content-outlet [content]="content" (mousedown)="onMouseDown($event, input)" > <ng-template let-icon> <div [innerHTML]="icon"></div> </ng-template> </content-outlet>
рдпрджрд┐ рдЖрдк рдЗрдирдкреБрдЯ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рддреИрдирд╛рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдЖрдЙрдЯрд▓реЗрдЯ рдХреЛ рдмреНрд▓реЙрдХ рдХрд░ рджреЗрдЧрд╛ рдФрд░ рдЙрд╕ рдкрд░ рд╕рднреА рдХреНрд▓рд┐рдХ рд╣реЛрдВрдЧреЗред рдпрд╣ рдПрдХ рд╕рдЬрд╛рд╡рдЯреА рдЖрдЗрдХрди рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЗрдирдкреБрдЯ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдЖрд╡рд░реНрдзрдХ рдЧреНрд▓рд╛рд╕ рдЖрдЗрдХрдиред рдКрдкрд░ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдкреЙрд▓реАрдореЙрд░реНрдлрд┐рдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдПрд╕рд╡реАрдЬреА рдЖрдЗрдХрди рдбрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд╖рд┐рдд рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ innerHTML
рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрджрд┐, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рджрд░реНрдЬ рдХрд┐рдП рдЧрдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЕрд╡рддрд╛рд░ рдХреЛ рджрд┐рдЦрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рд╣рдо рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рд╡рд╣рд╛рдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдХреЙрдореНрдмреЛрдмреЙрдХреНрд╕ рдХреЛ рднреА рдПрдХ рдЖрдЗрдХрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕реЗ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЙрдЯрд▓реЗрдЯ рдореЗрдВ onMouseDown
рд╣реИрдВрдбрд▓рд░ рдЬреЛрдбрд╝реЗрдВ:
onMouseDown(event: MouseEvent, input: HTMLInputElement) { event.preventDefault(); input.focus(); }
рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЛ рд╕рд╛рдордЧреНрд░реА рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд░рдиреЗ рд╕реЗ рд╣рдо рд╕реАрдПрд╕рдПрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрдЪреНрдЪ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдмрд╕ рдЗрд╕реЗ рдмрдврд╝рд╛ рдкрд╛рдПрдВрдЧреЗ : рд╕рд╛рдкреЗрдХреНрд╖ рдЖрдЗрдХрдиред рдлрд┐рд░ рдЖрдк рдХреЙрдореНрдмреЛ рдмреЙрдХреНрд╕ рдореЗрдВ рд╣реА рдЙрд╕ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рджрд╕реНрдпрддрд╛ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ:
<app-input [content]="icon"></app-input> <ng-template #icon> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" class="icon" [class.icon_opened]="opened" (click)="onClick()" > <polyline points="7,10 12,15 17,10" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" /> </svg> </ng-template>
рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╕рдВрдЧрдарди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд╣рдореЗрдВ рд╡рд╛рдВрдЫрд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдорд┐рд▓рддрд╛ рд╣реИ:

рдШрдЯрдХ рдХреЛрдб, рдЯреИрдм рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдбреЗрдЯрд╛ рдореЙрдбрд▓ рдХреЗ рдЬреНрдЮрд╛рди рдХреЗ рд╕рд╛рде рдлреИрд▓рд╛рд╡ред рдпрд╣ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
export class ComboBoxComponent<T> { @Input() items: ReadonlyArray<T> = []; @Input() content: Content = ({$implicit}) => String($implicit); @Input() stringify = (item: T) => String(item); @Input() value: T | null = null; @Output() valueChange = new EventEmitter<T | null>(); stringValue = '';
рдРрд╕рд╛ рд╕рд░рд▓ рдХреЛрдб рдЖрдкрдХреЛ рдХреЙрдореНрдмреЛрдмреЙрдХреНрд╕ рдореЗрдВ рдХрд┐рд╕реА рднреА рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдФрд░ рдЙрдирдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдмрд╣реБрдд рд▓рдЪреАрд▓реЗ рдврдВрдЧ рд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдХреБрдЫ рд╕реБрдзрд╛рд░реЛрдВ рдХреЗ рдмрд╛рдж рдЬреЛ рд╡рд░реНрдгрд┐рдд рдЕрд╡рдзрд╛рд░рдгрд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИрдВ, рдпрд╣ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИред рдЙрдкрд╕реНрдерд┐рддрд┐ рд╣рд░ рд╕реНрд╡рд╛рдж рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

рдирд┐рд╖реНрдХрд░реНрд╖
рдЕрдЬреНрдЮреЗрдп рдШрдЯрдХреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЗ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред рдЙрд╕реА рд╕рдордп, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдШрдЯрдХ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рдЙрдкрдХрд░рдг рдорд┐рд▓рддрд╛ рд╣реИред рдЗрди рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред рдбреЗрдЯрд╛ рдореЙрдбрд▓ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░рддрд╛ рдХреЛрдб рдХреЛ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ, рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдФрд░ рдПрдХреНрд╕реНрдЯреЗрдВрд╕рд┐рдмрд▓ рдмрдирд╛рддреА рд╣реИред рдЙрд╕реА рд╕рдордп, рд╣рдордиреЗ рдЗрддрдиреА рд╕рд╛рд░реА рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдирд╣реАрдВ рд▓рд┐рдЦреАрдВ рдФрд░ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХреЛрдгреАрдп рдЙрдкрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред
рд╡рд░реНрдгрд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдЖрдк рдЬрд▓реНрджреА рд╕реЗ рдиреЛрдЯрд┐рд╕ рдХрд░реЗрдВрдЧреЗ рдХрд┐ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд▓рд╛рдЗрдиреЛрдВ рдпрд╛ рдкреИрдЯрд░реНрди рдХреЗ рдмрдЬрд╛рдп рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╕реЛрдЪрдирд╛ рдХрд┐рддрдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рд╕рддреНрдпрд╛рдкрди рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢, рдЯреВрд▓рдЯрд┐рдкреНрд╕, рдореЛрдбрд▓ рд╡рд┐рдВрдбреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ - рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рди рдХреЗрд╡рд▓ рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд▓реНрдХрд┐ рд╕рдВрдкреВрд░реНрдг рд░реВрдк рд╕реЗ рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдЕрдЪреНрдЫрд╛ рд╣реИред рд╕реНрдХреЗрдЪрд┐рдВрдЧ рд▓реЗрдЖрдЙрдЯ рдФрд░ рдкрд░реАрдХреНрд╖рдг рддрд░реНрдХ рдЖрд╕рд╛рди рд╣реИ! рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреЙрдкрдЕрдк рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдПрдХ рдШрдЯрдХ рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЖрдк рдмрд╕ рд╕реНрдЯрдм рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдмрд╛рдж рдореЗрдВ рдЙрд╕ рдкрд░ рд╡рд╛рдкрд╕ рдЖ рд╕рдХрддреЗ рд╣реИрдВред
рд╣рдо Tinkoff.ru рдкрд░ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рд╡рд░реНрдгрд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдПрдирдЬреА-рдкреЙрд▓реАрдореЙрд░реНрдлрд┐рдпрд╕ рдирд╛рдордХ рдПрдХ рдЫреЛрдЯреЗ (1 рдХреЗрдмреА рдЧрдЬрд╝рд┐рдк) рдУрдкрди-рд╕реЛрд░реНрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред
рд╕реНрд░реЛрдд рдХреЛрдб
npm рдкреИрдХреЗрдЬ
рдЗрдВрдЯрд░рдПрдХреНрдЯрд┐рд╡ рдбреЗрдореЛ рдФрд░ рд╕реИрдВрдбрдмреЙрдХреНрд╕
рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рднреА рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рдЦреБрд▓реЗ рд╕реНрд░реЛрдд рдореЗрдВ рд░рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рдереЗ, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдЖрдк рд╕рдВрдмрдВрдзрд┐рдд рдХрд╛рдореЛрдВ рд╕реЗ рднрдпрднреАрдд рд╣реИрдВ? рдХреЛрдгреАрдп рдУрдкрди-рд╕реЛрд░реНрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реНрдЯрд╛рд░реНрдЯрд░ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ, рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рд╣реИред рдЗрд╕рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реАрдЖрдИ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдХрдорд┐рдЯреНрд╕, рд▓рд┐рдВрдЯрд░, рдЪреИрдВрдЧрд▓реЗрдУ рдЬрдирд░реЗрд╢рди, рдЯреЗрд╕реНрдЯ рдХрд╡рд░реЗрдЬ рдФрд░ рдЙрд╕ рд╕рднреА рд╕рд╛рдорд╛рди рдкрд░ рдЪреЗрдХ рд╣реИред