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

рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди (DI)
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдореИрдВ рдШрдЯрдХ рдореЗрдВ рдЧрдпрд╛ рдФрд░ рджреЗрдЦрд╛ рдХрд┐ рдХреНрд▓рд╛рд╕ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рдХреБрдЫ рддрд░реНрдХ рдереЗред рдореИрдВрдиреЗ рдХрдХреНрд╖рд╛ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЗ рдХрд╛рдо рдХрд╛ рдереЛрдбрд╝рд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд┐рдпрд╛, рдФрд░ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЧрдпрд╛ рдХрд┐ рдпреЗ рдХреБрдЫ рдмрд╛рд╣рд░реА рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╡реЗ рдХрдХреНрд╖рд╛ рдореЗрдВ рдХреИрд╕реЗ рдЖрдП? рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдХреЛ рдХрд╣рд╛рдБ рдмреБрд▓рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛?
рдореИрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рддреБрд░рдВрдд рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдПрдХ рд╡рд░реНрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрджрд┐ "рд╕рд╛рдорд╛рдиреНрдп" рдореЗрдВ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдУрдУрдкреА рдХреБрдЫ "рд╣реИрдХ" рдХреЗ рд╕рд╛рде рдореМрдЬреВрдж рд╣реИ, рддреЛ рдИрдПрд╕ 6 рдХреЗ рд╕рд╛рде рдПрдХ "рд╡рд╛рд╕реНрддрд╡рд┐рдХ" рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╣реИред рдХреЛрдгреАрдп рдмреЙрдХреНрд╕ рдХреЗ рдареАрдХ рдмрд╛рд╣рд░ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рд▓рдЧрднрдЧ рд╕рдорд╛рди рд╣реИред рдЗрд╕рд▓рд┐рдП, рдореИрдВ рдЗрд╕реЗ рдЖрдЧреЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВред
рдХрд▓реНрдкрдирд╛ рдХреАрдЬрд┐рдП рдХрд┐ рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдореЗрдВ рдПрдХ JokerService
рд╡рд░реНрдЧ рд╣реИ рдЬреЛ рдЪреБрдЯрдХреБрд▓реЛрдВ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рддрд╛ рд╣реИред getJokes()
рд╡рд┐рдзрд┐ рдЪреБрдЯрдХреБрд▓реЛрдВ рдХреА рд╕реВрдЪреА рд▓реМрдЯрд╛рддреА рд╣реИред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдо рдЗрд╕реЗ рддреАрди рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдХреЛрдб рдореЗрдВ рддреАрди рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдЪреБрдЯрдХреБрд▓реЗ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ? рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВ:
- рд╣рд░ рдЬрдЧрд╣ рдХрдХреНрд╖рд╛ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдПрдВред рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдореЗрдореЛрд░реА рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдФрд░ рдЗрддрдиреЗ рд╕рд╛рд░реЗ рд╕рдорд╛рди рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ? рдФрд░ рдЕрдЧрд░ 100 рд╕реАрдЯреЗрдВ рд╣реИрдВ?
- рд╡рд┐рдзрд┐ рдХреЛ рд╕реНрдерд┐рд░ рдХрд░реЗрдВ рдФрд░ JokerService.getJokes () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреЗрдЯрд╛ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред
- рдбрд┐рдЬрд╛рдЗрди рдкреИрдЯрд░реНрди рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдВред рдпрджрд┐ рд╣рдореЗрдВ рд╕рдВрдкреВрд░реНрдг рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рд╕реЗрд╡рд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╕рд┐рдВрдЧрд▓рдЯрди рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдХрдХреНрд╖рд╛ рдореЗрдВ рдПрдХ рдирдпрд╛ рддрд░реНрдХ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред
рдЗрд╕рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рддреАрди рд╡рд┐рдХрд▓реНрдк рд╣реИрдВред рдкрд╣рд▓рд╛ рд╣рдореЗрдВ рд╕реВрдЯ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ - рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рдЕрдкреНрд░рднрд╛рд╡реА рд╣реИред рд╣рдо рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд░рддрд┐рдпрд╛рдВ рдмрдирд╛рдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдорд╛рди рд╣реЛрдВрдЧреЗред рджреЛ рд╡рд┐рдХрд▓реНрдк рд╢реЗрд╖ рд╣реИрдВред
рдЖрдЗрдП рдЗрд╕ рдХрд╛рд░реНрдп рдХреЛ рд╕рдордЭрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ рдХрд┐ рдХреМрди рд╕реА рд╡рд┐рдзрд┐ рд╣рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреА рд▓рдЧрддреА рд╣реИред рдорд╛рди рд▓реАрдЬрд┐рдП, рддреАрд╕рд░реЗ рд╕реНрдерд╛рди рдкрд░, рд╣рдореЗрдВ рдХреБрдЫ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдЕрдкрдиреА рд╕реНрд╡рдпрдВ рдХреА рд╕реЗрд╡рд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдХрд╛рд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд▓реЗрдЦрдХ, рдордЬрд╝рд╛рдХ рдХреА рд▓рдВрдмрд╛рдИ, рднрд╛рд╖рд╛ рдФрд░ рдмрд╣реБрдд рдХреБрдЫ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдлрд┐рд░ рд╣рдо рдХреНрдпрд╛ рдХрд░реЗрдВрдЧреЗ?
рд╕реНрдереИрддрд┐рдХ рд╡рд┐рдзрд┐ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдкрдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдХреЙрд▓ рдХреЗ рд╕рд╛рде рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдкрд╛рд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдХрдХреНрд╖рд╛ рд╕рднреА рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рд╕рд╛рдорд╛рдиреНрдп рд╣реИред рдпрд╣реА рд╣реИ, getJokes()
рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рдХреЙрд▓ рдореЗрдВ рд╣рдо рдЗрд╕ рдЬрдЧрд╣ рдХреЗ рд▓рд┐рдП рдЕрджреНрд╡рд┐рддреАрдп рд╕рднреА рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░реЗрдВрдЧреЗред рдмреЗрд╢рдХ, рдЬрдм рдЖрдк getJokes()
рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЙрдиреНрд╣реЗрдВ рдкрд╛рд╕ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдмрд╕ getJokes()
рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВред
рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рджреВрд╕рд░рд╛ рд╡рд┐рдХрд▓реНрдк рд╣рдореЗрдВ рд╕реВрдЯ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛: рдпрд╣ рд╣рдореЗрдВ рд╣рд░ рдЬрдЧрд╣ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХреЛрдб рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХрд░реЗрдЧрд╛ред рдпрд╣ рдХреЗрд╡рд▓ рд╕рд┐рдВрдЧрд▓рдЯрди рдмрдирд╛ рд╣реБрдЖ рд╣реИ, рдЬрд┐рд╕реЗ рдлрд┐рд░ рд╕реЗ рддрд░реНрдХ рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рд╡рд┐рд╡рд┐рдзрддрд╛рдУрдВ рдХреЗ рд╕рд╛рдеред рд▓реЗрдХрд┐рди рдХреИрд╕реЗ рд╕рдордЭреЗрдВ рдХрд┐ рд╣рдореЗрдВ рдХрд┐рд╕ рд╡рд┐рдХрд▓реНрдк рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ?
рдЕрдЧрд░ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдмрд╕ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╡рд╛рдВрдЫрд┐рдд рд╕реЗрд╡рд╛ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдВрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдореИрдВ рдЖрдкрдХреЛ рдмрдзрд╛рдИ рджреЗ рд╕рдХрддрд╛ рд╣реВрдВ: рдЖрдкрдХреЛ рдмрд╕ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реА рдЗрдВрдЬреЗрдХреНрд╢рди рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЪрд▓рд┐рдП рдереЛрдбрд╝рд╛ рдЧрд╣рд░рд╛рдИ рдореЗрдВ рдЬрд╛рддреЗ рд╣реИрдВред
рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╕рд╣реА рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╣рдорд╛рд░реА рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддрдВрддреНрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рдЬреЛрдХрд░ рд╕рд░реНрд╡рд┐рд╕ рдХреЛ рджреЛ рдЕрдиреНрдп рд╕реЗрд╡рд╛рдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИ, рдФрд░ рджреВрд╕рд░реЗ рдХреЛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реНрдерд╛рди рдкрд░ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкрд░рд┐рдгрд╛рдо рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИред
рдХреЛрдгреАрдп рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди
рдЬреИрд╕рд╛ рдХрд┐ рдкреНрд░рд▓реЗрдЦрди рдХрд╣рддрд╛ рд╣реИ, DI рдПрдХ рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдбрд┐рдЬрд╛рдЗрди рдкреИрдЯрд░реНрди рд╣реИред рдХреЛрдгреАрдп рдХреА рдЕрдкрдиреА рдирд┐рд░реНрднрд░рддрд╛ рд░реВрдкрд░реЗрдЦрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рджрдХреНрд╖рддрд╛ рдФрд░ рдкреНрд░рддрд┐рд░реВрдкрдХрддрд╛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдгреАрдп рдореЗрдВ рд╣реА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЖрдо рддреМрд░ рдкрд░, рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реА рдЗрдВрдЬреЗрдХреНрд╢рди рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рддрдВрддреНрд░ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рд╡рд░реНрдЧ рдЕрдкрдиреЗ рдЖрдк рд╣реА рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдХрд╣реАрдВ рдмрд╛рд╣рд░ рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рдирд┐рд░реНрднрд░рддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред
html
рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╡рд╛рд▓реА рд╕рд┐рдВрдЯреИрдХреНрд╕ рдФрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рднреНрд░рдорд┐рдд рди рдХрд░реЗрдВред рдХреЛрдгреАрдп рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдХ рдПрдХ рдирд┐рдпрдорд┐рдд рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИ, рдЬреЛ рдПрдХ рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рд╢рдмреНрджреЛрдВ рдореЗрдВ: рдЬрдм рдЖрдк рдХрд┐рд╕реА рдШрдЯрдХ рдХреЛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдШрдЯрдХ рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рддрджрдиреБрд╕рд╛рд░, рдЗрд╕ рд╕рдордп, рдЖрдк рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдХреЛ рдЖрд╡рд╢реНрдпрдХ рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдм рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
@Component({ selector: 'jokes', template: './jokes.template.html', }) export class JokesComponent { private jokes: Observable<IJoke[]>; constructor(private jokerService: JokerService) { this.jokes = this.jokerService.getJokes(); } }
рдШрдЯрдХ рдирд┐рд░реНрдорд╛рддрд╛ рдореЗрдВ, рд╣рдо рдмрд╕ рд╕рдВрдХреЗрдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдореЗрдВ рдПрдХ JokerService
рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рдо рдЗрд╕реЗ рдЦреБрдж рдирд╣реАрдВ рдмрдирд╛рддреЗ рд╣реИрдВред рдпрджрд┐ рдкрд╛рдВрдЪ рдФрд░ рдШрдЯрдХ рд╣реИрдВ рдЬреЛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╡реЗ рд╕рднреА рдПрдХ рд╣реА рдЙрджрд╛рд╣рд░рдг рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░реЗрдВрдЧреЗред рдпрд╣ рд╕рдм рд╣рдореЗрдВ рд╕рдордп рдмрдЪрд╛рдиреЗ, рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреЛ рдЦрддреНрдо рдХрд░рдиреЗ рдФрд░ рдмрд╣реБрдд рд╣реА рдЙрддреНрдкрд╛рджрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдкреНрд░рджрд╛рддрд╛рдУрдВ
рдФрд░ рдЕрдм рдореИрдВ рдорд╛рдорд▓реЗ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддрд╛ рд╣реВрдВ рдЬрдм рдЖрдкрдХреЛ рд╕реЗрд╡рд╛ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдЙрджрд╛рд╣рд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╕реЗрд╡рд╛ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ:
@Injectable({ providedIn: 'root', // , ┬л┬╗ }) export class JokerService { getJokes(): Observable<IJoke[]> { // } }
рдЬрдм рдкреВрд░реЗ рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рд╕реЗрд╡рд╛ рдПрдХ рд╣реИ, рддреЛ рдпрд╣ рд╡рд┐рдХрд▓реНрдк рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рд╣рдо рдХрд╣рддреЗ рд╣реИрдВ, JokerService
рджреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди? рдпрд╛ рдпрд╣ рд╕рд┐рд░реНрдл рдХрд┐рд╕реА рдХрд╛рд░рдг рдХреЗ рд▓рд┐рдП рд╣реИ рдХрд┐ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдШрдЯрдХ рдХреЛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╕реЗрд╡рд╛ рдЙрджрд╛рд╣рд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рдЙрддреНрддрд░ рд╕рд░рд▓ рд╣реИ: provider
ред
рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рдореИрдВ provider
рдкреНрд░рджрд╛рддрд╛ рдХрд╣реВрдВрдЧрд╛, рдФрд░ рдПрдХ рд╡рд░реНрдЧ рдореЗрдВ рдПрдХ рдореВрд▓реНрдп рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рдЬрд╛рдВрдЪ рдХреА рдЬрд╛рдПрдЧреАред рдЗрд╕рд▓рд┐рдП, рд╣рдо рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЛрдВ рд╕реЗ рдФрд░ рд╡рд┐рднрд┐рдиреНрди рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ рд╕реЗрд╡рд╛ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЪрд▓реЛ рдЖрдЦрд┐рд░реА рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рддреАрди рд╡рд┐рдХрд▓реНрдк рдЙрдкрд▓рдмреНрдз рд╣реИрдВ:
- рдкреВрд░реЗ рдЖрд╡реЗрджрди рдореЗрдВ - рдкреНрд░рджрд╛рди рдХрд░реЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ
provideIn: 'root'
рд╕реЗрд╡рд╛ рдбреЗрдХреЛрд░реЗрдЯрд░ рдореЗрдВ рд╣реА provideIn: 'root'
ред - рдореЙрдбреНрдпреВрд▓ рдореЗрдВ - рдкреНрд░рджрд╛рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрд╡рд╛ рдбреЗрдХреЛрд░реЗрдЯрд░ рдореЗрдВ рдкреНрд░рджрд╛рддрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ
provideIn: JokesModule
рдпрд╛ @NgModule providers: [JokerService]
рдореЗрдВ @NgModule providers: [JokerService]
рдореЙрдбреНрдпреВрд▓ рдХреЗ рдбреЗрдХреЛрд░реЗрдЯрд░ рдореЗрдВ @NgModule providers: [JokerService]
ред - рдШрдЯрдХ рдореЗрдВ - рдореЙрдбреНрдпреВрд▓ рдХреЗ рдбреЗрдХреЛрд░реЗрдЯрд░ рдореЗрдВ рдкреНрд░рджрд╛рддрд╛ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдореЙрдбреНрдпреВрд▓ рдореЗрдВред
рдЖрдкрдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕реНрдерд╛рди рдЪреБрдирд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдордиреЗ рдЗрд╕ рдЬрдЧрд╣ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛, рдЪрд▓реЛ рддрдВрддреНрд░ рдкрд░ рд╣реА рдЪрд▓рддреЗ рд╣реИрдВред рдпрджрд┐ рд╣рдо рдХреЗрд╡рд▓ provideIn: root
рд╕реЗрд╡рд╛ рдореЗрдВ provideIn: root
, рдпрд╣ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдЧрд╛:
@NgModule({ // ... providers: [{provide: JokerService, useClass: JokerService}], }) //
рдЗрд╕реЗ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдкрдврд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: "рдЕрдЧрд░ рдПрдХ JokerService
рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ JokerService┬╗
рдХреНрд▓рд╛рд╕ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдВ JokerService┬╗
рдпрд╣рд╛рдБ рд╕реЗ рдЖрдк рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЛрдВ рд╕реЗ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
рдЯреЛрдХрди рджреНрд╡рд╛рд░рд╛ - рдЖрдкрдХреЛ рдПрдХ InjectionToken
рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдФрд░ рдЙрд╕ рдкрд░ рдПрдХ рд╕реЗрд╡рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рдЖрдк рдПрдХ рд╣реА рдЯреЛрдХрди рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
const JOKER_SERVICE_TOKEN = new InjectionToken<string>('JokerService'); // ... [{provide: JOKER_SERVICE_TOKEN, useClass: JokerService}];
рд╡рд░реНрдЧ рджреНрд╡рд╛рд░рд╛ - рдЖрдк рдХрдХреНрд╖рд╛ рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо JokerService
рд▓рд┐рдП JokerService
, рдФрд░ рджреЗрдВрдЧреЗ - JokerHappyService
:
[{provide: JokerService, useClass: JokerHappyService}];
рдореВрд▓реНрдп рд╕реЗ - рдЖрдк рддреБрд░рдВрдд рд╡рд╛рдВрдЫрд┐рдд рдЙрджрд╛рд╣рд░рдг рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
[{provide: JokerService, useValue: jokerService}];
рдлреИрдХреНрдЯреНрд░реА рджреНрд╡рд╛рд░рд╛ - рдЖрдк рдХреНрд▓рд╛рд╕ рдХреЛ рдЙрд╕ рдлреИрдХреНрдЯреНрд░реА рд╕реЗ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдПрдХреНрд╕реЗрд╕ рд╣реЛрдиреЗ рдкрд░ рд╡рд╛рдВрдЫрд┐рдд рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдПрдЧреА:
[{provide: JokerService, useFactory: jokerServiceFactory}];
рд╡рд╣ рд╕рдм рд╣реИред рдпрд╣реА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдЙрдкрд░реЛрдХреНрдд рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдкрдиреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЙрдкрдпреБрдХреНрдд рдЪреБрдиреЗрдВред
рд╡реИрд╕реЗ, рдбреАрдЖрдИ рди рдХреЗрд╡рд▓ рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд▓рд┐рдП, рдмрд▓реНрдХрд┐ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдХрд┐рд╕реА рднреА рдЗрдХрд╛рдИ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдШрдЯрдХ рдирд┐рд░реНрдорд╛рддрд╛ рдореЗрдВ рдорд┐рд▓рддрд╛ рд╣реИред рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рддрдВрддреНрд░ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрд╕рдХреА рдкреВрд░реНрдг рдХреНрд╖рдорддрд╛ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рд╕рд╛рд░рд╛рдВрд╢
рдПрдХ рдкреВрд░реА рд╕рдордЭ рдХреЗ рд▓рд┐рдП, рдореИрдВ рд╕реЗрд╡рд╛ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЪрд░рдгреЛрдВ рдореЗрдВ рдХреЛрдгреАрдп рдореЗрдВ рд╕рд░рд▓реАрдХреГрдд рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рддрдВрддреНрд░ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддрд╛ рд╣реВрдВ:
- рдЖрд╡реЗрджрди рдХреЛ рд╢реБрд░реВ рдХрд░рддреЗ рд╕рдордп, рд╕реЗрд╡рд╛ рдореЗрдВ рдПрдХ рдЯреЛрдХрди рд╣реЛрддрд╛ рд╣реИред рдпрджрд┐ рд╣рдордиреЗ рдЗрд╕реЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкреНрд░рджрд╛рддрд╛ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЬреЛрдХрд░ рд╕рд░реНрд╡рд┐рд╕ рд╣реИред
- рдЬрдм рдХрд┐рд╕реА рдШрдЯрдХ рдореЗрдВ рдХрд┐рд╕реА рд╕реЗрд╡рд╛ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рддрдВрддреНрд░ рдЯреЛрдХрди рдореМрдЬреВрдж рд╣реЛрдиреЗ рдкрд░ DI рддрдВрддреНрд░ рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИред
- рдпрджрд┐ рдЯреЛрдХрди рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ, рддреЛ DI рдПрдХ рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХ рджреЗрдЧрд╛ред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЯреЛрдХрди рдореМрдЬреВрдж рд╣реИ рдФрд░ рдЬреЛрдХрд░ рд╕рд░реНрд╡рд┐рд╕ рдЙрд╕ рдкрд░ рд╕реНрдерд┐рдд рд╣реИред
- рдЬрдм рдШрдЯрдХ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдПрдХ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдХрд░ рд╕рд░реНрд╡рд┐рд╕ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдмрджрд▓реЗрдВ
рд╣рдо рдЕрдХреНрд╕рд░ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реБрдирддреЗ рд╣реИрдВ, "рдлреНрд░реЗрдорд╡рд░реНрдХ рдЖрдкрдХреЗ рд▓рд┐рдП рд╕рдм рдХреБрдЫ рдХрд░реЗрдЧрд╛ - рддреЗрдЬ рдФрд░ рдЕрдзрд┐рдХ рдХреБрд╢рд▓рддрд╛ рд╕реЗред рдЖрдкрдХреЛ рдХреБрдЫ рднреА рд╕реЛрдЪрдиреЗ рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИред рдмрд╕ рдбреЗрдЯрд╛ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░реЗрдВред тАЭ рд╢рд╛рдпрдж рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рд╕рд╛рде рд╕рдЪ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдкрдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдирдкреБрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╣реИ рдФрд░ рд▓рдЧрд╛рддрд╛рд░ рдбреЗрдЯрд╛ рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдмрд╕ рдпрд╣ рдЬрд╛рдирдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдФрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреИрд╕реЗ рд╣реЛрддреА рд╣реИред
рдХреЛрдгреАрдп рдореЗрдВ, рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдЬрд╛рдБрдЪ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рд╡рд░реНрддрди рдЬрд╛рдВрдЪ рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред рд╡рд┐рднрд┐рдиреНрди рдкрд░рд┐рдЪрд╛рд▓рдиреЛрдВ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк - рдПрдХ рд╡рд░реНрдЧ рдХреА рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдореВрд▓реНрдп рдХреЛ рдмрджрд▓рдирд╛, рдПрдХ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдСрдкрд░реЗрд╢рди рдХреЛ рдкреВрд░рд╛ рдХрд░рдирд╛, рдПрдХ HTTP рдЕрдиреБрд░реЛрдз рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдирд╛, рдФрд░ рдЗрд╕реА рддрд░рд╣ - рд╕рддреНрдпрд╛рдкрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреВрд░реЗ рдШрдЯрдХ рдкреЗрдбрд╝ рдореЗрдВ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИред
рдЪреВрдВрдХрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдореБрдЦреНрдп рд▓рдХреНрд╖реНрдп рдпрд╣ рд╕рдордЭрдирд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдШрдЯрдХ рдХреЛ рдХреИрд╕реЗ рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХрд╛ рд╕рд╛рд░ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдирд╛ рд╣реИред рдпрджрд┐ рд╡реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реИрдВ, рддреЛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ "рдкрд░рд┐рд╡рд░реНрддрд┐рдд" рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рд╕реЗ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
Zone.js
рдпрд╣ рд╕рдордЭрдирд╛ рдХрд┐ рдПрдВрдЧреБрд▓рд░ рд╡рд░реНрдЧ рдХреЗ рдЧреБрдгреЛрдВ рдкрд░ рдХреИрд╕реЗ рдирдЬрд╝рд░ рд░рдЦрддрд╛ рд╣реИ рдФрд░ рд╕рдордХрд╛рд▓рд┐рдХ рд╕рдВрдЪрд╛рд▓рди рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХреИрд╕реЗ рдЯреНрд░реИрдХ рдХрд░рддрд╛ рд╣реИ? рдХреЛрдгреАрдп рдбреЗрд╡рд▓рдкрд░реНрд╕ рдореЗрдВ рд╕реЗ рдПрдХ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдИ рдЧрдИ рдЬреЛрди.рдЬреЗрдПрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА, рдЗрд╕рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред
рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдХреНрдпрд╛ рд╣реИ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдПрдХ рдЬрд╝реЛрди рдПрдХ "рдирд┐рд╖реНрдкрд╛рджрди рд╕рдВрджрд░реНрдн" рд╣реИ, рдЗрд╕реЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдЬрд┐рд╕ рд╕реНрдерд╛рди рдФрд░ рд░рд╛рдЬреНрдп рдореЗрдВ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдСрдкрд░реЗрд╢рди рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЙрд╕реА рдЬрд╝реЛрди рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдпрд╣ рдкрдВрдЬреАрдХреГрдд рдерд╛ред рддреЛ рдХреЛрдгреАрдп рдкрддрд╛ рд▓рдЧрд╛рддрд╛ рд╣реИ рдХрд┐ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╣рд╛рдВ рд╣реБрдЖ рдФрд░ рдХреНрдпрд╛ рдЬрд╛рдВрдЪрдирд╛ рд╣реИред
рдЬрд╝реЛрди.рдЬреЗрдПрд╕ рдЕрдкрдиреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рд▓рдЧрднрдЧ рд╕рднреА рдореВрд▓ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреА рдЬрдЧрд╣ рд▓реЗрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдпрд╣ рдЯреНрд░реИрдХ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рдПрдХ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдлрд╝рдВрдХреНрд╢рди callback
рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣реА рд╣реИ, рдЬрд╝реЛрди рдкрд░рд┐рд╡рд░реНрддрди рд╕рддреНрдпрд╛рдкрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдм рдФрд░ рдХрд╣рд╛рдБ рдХреЛрдгреАрдп рдмрддрд╛рддрд╛ рд╣реИред
рдкрд░рд┐рд╡рд░реНрддрди рд░рдгрдиреАрддрд┐рдпрд╛рдБ
рд╣рдореЗрдВ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдХреЛрдгреАрдп рдХреИрд╕реЗ рдПрдХ рдШрдЯрдХ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкрд░рд┐рд╡рд░реНрддрди рдЬрд╛рдБрдЪ рдЪрд▓рд╛рддрд╛ рд╣реИред рдЕрдм рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рджрд░реНрдЬрдиреЛрдВ рдШрдЯрдХреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд┐рд╢рд╛рд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реИред рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдХреНрд▓рд┐рдХ рдХреЗ рд▓рд┐рдП, рдкреНрд░рддреНрдпреЗрдХ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдСрдкрд░реЗрд╢рди, рд╣рд░ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдЕрдиреБрд░реЛрдз, рдШрдЯрдХреЛрдВ рдХреЗ рдкреВрд░реЗ рдкреЗрдбрд╝ рдкрд░ рдПрдХ рдЪреЗрдХ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдЖрд╡реЗрджрди рдореЗрдВ рдкреНрд░рджрд░реНрд╢рди рдХреА рдЧрдВрднреАрд░ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реЛрдВрдЧреАред
рдХреЛрдгреАрдп рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрд╛ рдФрд░ рд╣рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рд░рдгрдиреАрддрд┐ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рджрд┐рдпрд╛, рдЬрд┐рд╕рдХрд╛ рд╕рд╣реА рд╡рд┐рдХрд▓реНрдк рдЙрддреНрдкрд╛рджрдХрддрд╛ рдореЗрдВ рдХрд╛рдлреА рд╡реГрджреНрдзрд┐ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдЪреБрдирдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ:
- рдбрд┐рдлрд╝реЙрд▓реНрдЯ - рдЬреИрд╕рд╛ рдХрд┐ рдирд╛рдо рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ, рдпрд╣ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░рдгрдиреАрддрд┐ рд╣реИ рдЬрдм рдкреНрд░рддреНрдпреЗрдХ рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реАрдбреА рд▓реЙрдиреНрдЪ рдХреА рдЬрд╛рддреА рд╣реИред
- рдСрдирдкрд╢ рдПрдХ рд░рдгрдиреАрддрд┐ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХреЗрд╡рд▓ рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдПрдХ рд╕реАрдбреА рд▓реЙрдиреНрдЪ рдХреА рдЬрд╛рддреА рд╣реИ:
- рдпрджрд┐
@Input()
рдХрд╛ рдорд╛рди рдмрджрд▓ рдЧрдпрд╛ рд╣реИ; - рдЕрдЧрд░ рдШрдЯрдХ рдпрд╛ рдЙрд╕рдХреЗ рд╡рдВрд╢ рдХреЗ рдЕрдВрджрд░ рдХреЛрдИ рдШрдЯрдирд╛ рдШрдЯрд┐рдд рд╣реБрдИ рд╣реИ;
- рдпрджрд┐ рдЪреЗрдХ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛;
- рдпрджрд┐ рдХреЛрдИ рдирдИ рдШрдЯрдирд╛ Async рдкрд╛рдЗрдк рдореЗрдВ рдЖрддреА рд╣реИред
рдХреЛрдгреАрдп рдкрд░ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рдЕрдиреБрднрд╡ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдЕрдкрдиреЗ рд╕рд╣рдХрд░реНрдорд┐рдпреЛрдВ рдХреЗ рдЕрдиреБрднрд╡ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдореИрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ OnPush
рд░рдгрдиреАрддрд┐ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣рдореЗрд╢рд╛ рдмреЗрд╣рддрд░ рд╣реЛрддрд╛ рд╣реИ, рдЬрдм рддрдХ рдХрд┐ default
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рди рд╣реЛред рдЗрд╕рд╕реЗ рдЖрдкрдХреЛ рдХрдИ рдлрд╛рдпрджреЗ рдорд┐рд▓реЗрдВрдЧреЗ:
- рд╕реАрдбреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИ, рдЗрд╕рдХреА рд╕реНрдкрд╖реНрдЯ рд╕рдордЭред
@Input()
рдЧреБрдгреЛрдВ рдХреЗ рд╕рд╛рде рдиреАрдЯ рдХрд╛рд░реНрдпред- рдкреНрд░рджрд░реНрд╢рди рд▓рд╛рднред
рдЕрдиреНрдп рд▓реЛрдХрдкреНрд░рд┐рдп рд░реВрдкрд░реЗрдЦрд╛рдУрдВ рдХреА рддрд░рд╣, рдПрдВрдЧреБрд▓рд░ рдПрдХ рдбрд╛рдЙрдирд╕реНрдЯреНрд░реАрдо рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдШрдЯрдХ @Input()
рдбреЗрдХреЛрд░реЗрдЯрд░ рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рдЗрдирдкреБрдЯ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
interface IJoke { author: string; text: string; } @Component({ selector: 'joke', template: './joke.template.html', }) export class JokeComponent { @Input() joke: IJoke; }
рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдПрдХ рдШрдЯрдХ рд╣реИ рдЬреЛ рдордЬрд╝рд╛рдХ рдФрд░ рд▓реЗрдЦрдХ рдХреЗ рдкрд╛рда рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рд▓реЗрдЦрди рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдЧрд▓рддреА рд╕реЗ рдпрд╛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рд╡рд╕реНрддреБ рдХреЛ рдореНрдпреВрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкрд╛рда рдпрд╛ рд▓реЗрдЦрдХ рдХреЛ рдЕрдзрд┐рд▓реЗрдЦрд┐рдд рдХрд░реЗрдВред
setAuthorNameOnly() { const name = this.joke.author.split(' ')[0]; this.joke.author = name; }
рдореИрдВ рддреБрд░рдВрдд рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдПрдХ рдмреБрд░рд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдРрд╕реА рддреНрд░реБрдЯрд┐рдпреЛрдВ рд╕реЗ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЗрдирдкреБрдЯ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдХреЗрд╡рд▓ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдЖрдкрдХреЗ рдкрд╛рд╕ рдбреЗрдЯрд╛ рдХреА рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдФрд░ рд╕реАрдбреА рдмрдирд╛рдиреЗ рдХреА рд╕рдордЭ рд╣реЛрдЧреАред рдЗрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдХреНрд▓рд╛рд╕ рд▓рд┐рдЦрдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
@Component({ selector: 'joke', template: './joke.template.html', changeDetection: ChangeDetectionStrategy.OnPush, }) export class JokeComponent { @Input() readonly joke: IJoke; @Output() updateName = new EventEmitter<string>(); setAuthorNameOnly() { const name = this.joke.author.split(' ')[0]; this.updateName.emit(name); } }
рд╡рд░реНрдгрд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдПрдХ рдирд┐рдпрдо рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдПрдХ рд╕рд┐рдлрд╛рд░рд┐рд╢ рд╣реИред рдРрд╕реА рдХрдИ рд╕реНрдерд┐рддрд┐рдпрд╛рдВ рд╣реИрдВ рдЬрд╣рд╛рдВ рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдФрд░ рдЕрдкреНрд░рднрд╛рд╡реА рд╣реЛрдЧрд╛ред рд╕рдордп рдХреЗ рд╕рд╛рде, рдЖрдк рдпрд╣ рд╕рдордЭрдирд╛ рд╕реАрдЦреЗрдВрдЧреЗ рдХрд┐ рдХрд┐рд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЖрдк рдЗрдирдкреБрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рддрд░реАрдХреЗ рдХреЛ рдордирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
RxJS
рдмреЗрд╢рдХ, рдореИрдВ рдЧрд▓рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд░рд┐рдПрдХреНрдЯрд┐рд╡рдПрдХреНрд╕ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдПрдХ рдирдпрд╛ рдЪрд▓рди рд╣реИред рдХреЛрдгреАрдп рдЗрд╕ рдкреНрд░рд╡реГрддреНрддрд┐ рдХрд╛ рд╢рд┐рдХрд╛рд░ рд╣реБрдЖ (рдпрд╛ рд╢рд╛рдпрдж рдЗрд╕реЗ рдмрдирд╛рдпрд╛) рдФрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ RxJS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдкреВрд░реЗ рдврд╛рдВрдЪреЗ рдХрд╛ рдореВрд▓ рддрд░реНрдХ рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкрд░ рдЪрд▓рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЛ рд╕рдордЭрдирд╛ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред
рд▓реЗрдХрд┐рди рдЖрд░рдПрдХреНрд╕рдЬреЗрдПрд╕ рдХреНрдпрд╛ рд╣реИ? рдпрд╣ рддреАрди рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рдЬреЛрдбрд╝рддреА рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдореИрдВ рдХреБрдЫ рд╕рд░рд▓ рднрд╛рд╖рд╛ рдореЗрдВ рдХреБрдЫ рдЪреВрдХ рдХреЗ рд╕рд╛рде рдкреНрд░рдХрдЯ рдХрд░реВрдВрдЧрд╛:
- "рдСрдмреНрдЬрд░реНрд╡рд░" рдкреИрдЯрд░реНрди рдПрдХ рдРрд╕реА рд╕рдВрд╕реНрдерд╛ рд╣реИ рдЬреЛ рдШрдЯрдирд╛рдУрдВ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рддреА рд╣реИ, рдФрд░ рдПрдХ рд╢реНрд░реЛрддрд╛ рд╣реИ рдЬреЛ рдЗрди рдШрдЯрдирд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред
- рдЗрдЯрд░реЗрдЯрд░ рдкреИрдЯрд░реНрди - рдЖрдкрдХреЛ рдЗрд╕рдХреА рдЖрдВрддрд░рд┐рдХ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдкреНрд░рдХрдЯ рдХрд┐рдП рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреЗ рддрддреНрд╡реЛрдВ рддрдХ рдЕрдиреБрдХреНрд░рдорд┐рдХ рдкрд╣реБрдВрдЪ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
- рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдПрдХ рдРрд╕рд╛ рдкреИрдЯрд░реНрди рд╣реИ рдЬрд┐рд╕рдореЗрдВ рддрд░реНрдХ рдЫреЛрдЯреЗ рдФрд░ рдмрд╣реБрдд рд╕рд░рд▓ рдШрдЯрдХреЛрдВ рдореЗрдВ рдзрдбрд╝рдХрддрд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗрд╡рд▓ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИред
рдЗрди рдкреИрдЯрд░реНрдиреЛрдВ рдХреЗ рд╕рдВрдпреЛрдЬрди рд╕реЗ рд╣рдо рдмрд╣реБрдд рдЖрд╕рд╛рдиреА рд╕реЗ рдЙрди рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рд╡рд░реНрдгрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ рдЬрдЯрд┐рд▓ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
private loadUnreadJokes() { this.showLoader(); // fromEvent(document, 'load') .pipe( switchMap( () => this.http .get('/api/v1/jokes') // .pipe(map((jokes: any[]) => jokes.filter(joke => joke.unread))), // ), ) .subscribe( (jokes: any[]) => (this.jokes = jokes), // error => { /* */ }, () => this.hideLoader(), // ); }
рд╕рднреА рд╕реБрдВрджрд░ рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рдХреЗ рд╕рд╛рде рдХреЗрд╡рд▓ 18 рд▓рд╛рдЗрдиреЗрдВред рдЕрдм рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЛ рд╡реЗрдирд┐рд▓рд╛ рдпрд╛ рдХрдо рд╕реЗ рдХрдо jQuery рдкрд░ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдЗрд╕рдХрд╛ рд▓рдЧрднрдЧ 100% рдЖрдкрдХреЛ рдХрдо рд╕реЗ рдХрдо рджреЛ рдмрд╛рд░ рдЬреНрдпрд╛рджрд╛ рдЬрдЧрд╣ рд▓реЗ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдЗрддрдирд╛ рдЕрднрд┐рд╡реНрдпрдВрдЬрдХ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдпрд╣рд╛рдВ рдЖрдк рдмрд╕ рдЕрдкрдиреА рдЖрдВрдЦреЛрдВ рдХреЗ рд╕рд╛рде рд▓рд╛рдЗрди рдХрд╛ рдкрд╛рд▓рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рдХрд┐рддрд╛рдм рдХреА рддрд░рд╣ рдХреЛрдб рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред
рдирдореВрджрд╛рд░
рдпрд╣ рд╕рдордЭрдирд╛ рдХрд┐ рдХрд┐рд╕реА рднреА рдбреЗрдЯрд╛ рдХреЛ рдПрдХ рдзрд╛рд░рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рддреБрд░рдВрдд рдирд╣реАрдВ рдЖрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдореИрдВ рдПрдХ рд╕рд░рд▓ рд╕рд╛рджреГрд╢реНрдп рдореЗрдВ рдЬрд╛рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддрд╛ рд╣реВрдВред рдПрдХ рд╕реНрдЯреНрд░реАрдо рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ, рд╕рдордп рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдбреЗрдЯрд╛ рдХреА рдПрдХ рд╕рд░рдгреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рдЕрд╡рддрд╛рд░ рдореЗрдВ:
const observable = []; let counter = 0; const intervalId = setInterval(() => { observable.push(counter++); }, 1000); setTimeout(() => { clearInterval(intervalId); }, 6000);
рд╣рдо рд╕рд░рдгреА рдореЗрдВ рдЕрдВрддрд┐рдо рдорд╛рди рдХреЛ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдорд╛рдиреЗрдВрдЧреЗред рд╣рд░ рджреВрд╕рд░реЗ рдирдВрдмрд░ рдХреЛ рдРрд░реЗ рд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛ред рд╣рдо рдЙрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдХрд╣реАрдВ рдФрд░ рдХреИрд╕реЗ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ рддрддреНрд╡ рдХреЛ рд╕рд░рдгреА рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ? рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд╣рдо рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА callback
рдХреЙрд▓ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдЙрд╕ рдкрд░ рд╕рд░рдгреА рдХрд╛ рдорд╛рди рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдлрд┐рд░ рдЕрдВрддрд┐рдо рддрддреНрд╡ рд▓реЗ рд▓реЗрдВрдЧреЗред
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рди рдХреЗрд╡рд▓ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдирдП рддрд░реНрдХ рд▓рд┐рдЦрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдмрд▓реНрдХрд┐ рдЕрджреНрдпрддрди рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреА рд╕реЛрдЪрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдЗрд╕рдХреА рддреБрд▓рдирд╛ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╢реНрд░реЛрддрд╛ рд╕реЗ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ:
document.addEventListener('click', event => {});
рдЖрдк рдкреВрд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ EventListener
рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рд╡реЗ рдмрд╛рд╣рд░ рдХрд╛рдо рдХрд░реЗрдВрдЧреЗ, рдЬрдм рддрдХ рдХрд┐ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЖрдк рдЙрджреНрджреЗрд╢реНрдп рдкрд░ рд╡рд┐рдкрд░реАрдд рдХрд╛ рдзреНрдпрд╛рди рдирд╣реАрдВ рд░рдЦрддреЗ рд╣реИрдВред
рд░рд┐рдПрдХреНрдЯрд┐рд╡ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднреА рдХрд╛рдо рдХрд░рддреА рд╣реИред рдПрдХ рд╕реНрдерд╛рди рдкрд░, рд╣рдо рдмрд╕ рдПрдХ рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рд╕рдордп-рд╕рдордп рдкрд░ рдирдП рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╡рд╣рд╛рдВ рдЫреЛрдбрд╝рддреЗ рд╣реИрдВ, рдФрд░ рджреВрд╕рд░реЗ рдореЗрдВ, рд╣рдо рдЗрд╕ рд╕реНрдЯреНрд░реАрдо рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рдмрд╕ рдЗрди рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╕реБрдирддреЗ рд╣реИрдВред рдпрд╣реА рд╣реИ, рд╣рдо рд╣рдореЗрд╢рд╛ рдЕрдкрдбреЗрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реАрдЦрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рд╕рдВрднрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред
рдЕрдм рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦрддреЗ рд╣реИрдВ:
export class JokesListComponent implements OnInit { jokes$: Observable<IJoke>; authors$ = new Subject<string[]>(); unread$ = new Subject<number>(); constructor(private jokerService: JokerService) {} ngOnInit() { // , subscribe() this.jokes$ = this.jokerService.getJokes(); this.jokes$.subscribe(jokes => { this.authors$.next(jokes.map(joke => joke.author)); this.unread$.next(jokes.filter(joke => joke.unread).length); }); } }
рдЗрд╕ рддрд░реНрдХ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдЬрдм jokes
рдореЗрдВ рдбреЗрдЯрд╛ рдмрджрд▓рддреЗ jokes
, рддреЛ рд╣рдо рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЕрдкрдард┐рдд рдЪреБрдЯрдХреБрд▓реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдФрд░ рд▓реЗрдЦрдХреЛрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рдбреЗрдЯрд╛ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреБрдЫ рдФрд░ рдШрдЯрдХ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдПрдХ рдПрдХ рд▓реЗрдЦрдХ рджреНрд╡рд╛рд░рд╛ рдкрдврд╝реЗ рдЧрдП рдЪреБрдЯрдХреБрд▓реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкрд░ рдЖрдВрдХрдбрд╝реЗ рдПрдХрддреНрд░ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░рд╛ рдЪреБрдЯрдХреБрд▓реЛрдВ рдХреА рдФрд╕рдд рд▓рдВрдмрд╛рдИ рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдлрд╛рдпрджреЗ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред
рдЯреЗрд╕реНрдЯрдмреЗрдб
рдЬрд▓реНрджреА рдпрд╛ рдмрд╛рдж рдореЗрдВ, рдбреЗрд╡рд▓рдкрд░ рд╕рдордЭрддрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдПрдорд╡реАрдкреА рдирд╣реАрдВ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдФрд░ рдЕрдзрд┐рдХ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рд▓рд┐рдЦрд╛ рдЬрд╛рдПрдЧрд╛, рд╕реНрдкрд╖реНрдЯ рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рдЙрдирдХреЗ рд╡рд┐рд╡рд░рдг, рдЖрд╕рд╛рди, рддреЗрдЬ рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдпрд╣ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдиреЗ рдФрд░ рдЕрдкрдиреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИред
рдХреЛрдгреАрдп рдиреЗ рд╕рдВрднрд╡рддрдГ рдЗрд╕реЗ рджреВрд░ рдХрд┐рдпрд╛ рдФрд░ рд╣рдореЗрдВ рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдкрд░реАрдХреНрд╖рдг рдЙрдкрдХрд░рдг рджрд┐рдпрд╛ред рдХрдИ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдкрд╣рд▓реЗ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдЬрд╛рдиреЗ рдХреЗ рдмрд┐рдирд╛ "рд╢реБрд░реВ рд╕реЗ" рдХрд┐рд╕реА рддрд░рд╣ рдХреА рддрдХрдиреАрдХ рдХреЛ рдорд╛рд╕реНрдЯрд░ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВред рдореИрдВрдиреЗ рд╡рд╣реА рдХрд┐рдпрд╛, рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг рдореБрдЭреЗ "рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░" рдЙрдкрд▓рдмреНрдз рд╕рднреА рдкрд░реАрдХреНрд╖рдг рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рдХрд╛рдлреА рджреЗрд░ рд╕реЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖред
рдЖрдк рдХреЛрдгреАрдп рдореЗрдВ рдХреБрдЫ рднреА рдкрд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдкрдХреЛ рдмрд╕ рдПрдХ рдирд┐рдпрдорд┐рдд рд╡рд░реНрдЧ рдпрд╛ рд╕реЗрд╡рд╛ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреБрд░рдВрдд рдХреЙрд▓ рдХрд░рдиреЗ рдФрд░ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдШрдЯрдХ рдХреЗ рд╕рд╛рде рд╕реНрдерд┐рддрд┐ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рд╣реИред
рдЬреИрд╕рд╛ рдХрд┐ рд╣рдореЗрдВ рдкрд╣рд▓реЗ рд╣реА рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ, рдШрдЯрдХ рдХреЗ рдмрд╛рд╣рд░ рдбреАрдЖрдИ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдПрдХ рддрд░рдл, рдпрд╣ рдкреВрд░реЗ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдереЛрдбрд╝рд╛ рдЬрдЯрд┐рд▓ рдХрд░рддрд╛ рд╣реИ, рджреВрд╕рд░реА рдУрд░, рдпрд╣ рд╣рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдФрд░ рдХрдИ рдорд╛рдорд▓реЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╢рд╛рдирджрд╛рд░ рдЕрд╡рд╕рд░ рджреЗрддрд╛ рд╣реИред рдореИрдВ рдПрдХ рдШрдЯрдХ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ рд╕рдордЭрдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддрд╛ рд╣реВрдВ:
@Component({ selector: 'app-joker', template: '<some-dependency></some-dependency>', styleUrls: ['./joker.component.less'], }) export class JokerComponent { constructor( private jokesService: JokesService, @Inject(PARTY_TOKEN) private partyService: PartyService, @Optional() private sleepService: SleepService, ) {} makeNewFriend(): IFriend { if (this.sleepService && this.sleepService.isSleeping) { this.sleepService.wakeUp(); } const joke = this.jokesService.generateNewJoke(); this.partyService.goToParty('Pacha'); this.partyService.toSay(joke.text); const laughingPeople = this.partyService.getPeopleByReaction('laughing'); const girl = laughingPeople.find(human => human.sex === 'female'); const friend = this.partyService.makeFriend(girl); return friend; } }
рддреЛ, рд╡рд░реНрддрдорд╛рди рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рддреАрди рд╕реЗрд╡рд╛рдПрдВ рд╣реИрдВред рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рддрд░реАрдХреЗ рд╕реЗ рдЖрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдПрдХ рдЯреЛрдХрди рджреНрд╡рд╛рд░рд╛ рдФрд░ рджреВрд╕рд░рд╛ рд╕реЗрд╡рд╛ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИред рд╣рдо рдкрд░реАрдХреНрд╖рдг рдореЙрдбреНрдпреВрд▓ рдХреЛ рдХреИрд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддреЗ рд╣реИрдВ? рдореИрдВ рддреБрд░рдВрдд рд╕рдорд╛рдкреНрдд рджреГрд╢реНрдп рджрд┐рдЦрд╛рдКрдВрдЧрд╛:
beforeEach(async(() => { TestBed.configureTestingModule({ imports: [SomeDependencyModule], declarations: [JokerComponent], // , providers: [{provide: PARTY_TOKEN, useClass: PartyService}], }).compileComponents(); fixture = TestBed.createComponent(JokerComponent); component = fixture.componentInstance; fixture.detectChanges(); // , }));
TestBed
рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдПрдХ рдкреВрд░реНрдг рд╕рд┐рдореБрд▓реЗрд╢рди рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЖрдк рдЗрд╕реЗ рдХрд┐рд╕реА рднреА рд╕реЗрд╡рд╛рдУрдВ рдореЗрдВ рд╣реБрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдореЙрдбреНрдпреВрд▓ рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдПрдХ рдШрдЯрдХ рд╕реЗ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдмрд╣реБрдд рдХреБрдЫред рдЕрдм рдЬрдмрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдореЙрдбреНрдпреВрд▓ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рд╣реИ, рдЖрдЗрдП рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВред
рдЕрдирд╛рд╡рд╢реНрдпрдХ рдирд┐рд░реНрднрд░рддрд╛ рд╕реЗ рдмрдЪрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
рдПрдХ рдХреЛрдгреАрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рд╣реЛрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдЕрдиреНрдп рдореЙрдбреНрдпреВрд▓, рд╕реЗрд╡рд╛рдПрдВ, рдирд┐рд░реНрджреЗрд╢, рдФрд░ рдмрд╣реБрдд рдХреБрдЫ рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдкрд░реАрдХреНрд╖рдг рдореЗрдВ, рд╣рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрджрд┐ рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ <some-dependency></some-dependency>
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╣рдореЗрдВ <some-dependency></some-dependency>
рдХреЛ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рднреА рдЖрдпрд╛рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдФрд░ рдЕрдЧрд░ рд╡рд╣рд╛рдБ рд╡реНрдпрд╕рдиреЛрдВ рд░рд╣реЗ рд╣реИрдВ? рдЗрд╕рд▓рд┐рдП, рдЙрдиреНрд╣реЗрдВ рднреА рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдпрджрд┐ рдЖрд╡реЗрджрди рдЬрдЯрд┐рд▓ рд╣реИ, рддреЛ рдЗрд╕ рддрд░рд╣ рдХреА рдмрд╣реБрдд рд╕рд╛рд░реА рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рд╣реЛрдВрдЧреАред рд╕рднреА рдЖрд╢реНрд░рд┐рддреЛрдВ рдХреЛ рдЖрдпрд╛рдд рдХрд░рдиреЗ рд╕реЗ рддрдереНрдп рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рд╕рдВрдкреВрд░реНрдг рдЖрд╡реЗрджрди рд╕реНрдерд┐рдд рд╣реЛрдЧрд╛ рдФрд░ рд╕рднреА рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╢рд╛рдпрдж рдпрд╣ рд╣рдореЗрдВ рд╢реЛрднрд╛ рдирд╣реАрдВ рджреЗрддрд╛ред
рдЖрд╡рд╢реНрдпрдХ рдирд┐рд░реНрднрд░рддрд╛ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХрд╛ рдХрдо рд╕реЗ рдХрдо рдПрдХ рддрд░реАрдХрд╛ рд╣реИ - рдмрд╕ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ-рдкрд░реАрдХреНрд╖рдг рдпрд╛ рдПрдХреАрдХрд░рдг рдкрд░реАрдХреНрд╖рдг рд╣реИрдВ рдФрд░ рдШрдЯрдХ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рддрдм рдпрд╣ рдХреЗрд╡рд▓ рддрд░реАрдХреЛрдВ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЖрдк рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:
TestBed.configureTestingModule({ declarations: [JokerComponent], providers: [{provide: PARTY_TOKEN, useClass: PartyService}], }) .overrideTemplate(JokerComponent, '') // , .compileComponents();
рд╣рд╛рдВ, рдпрд╣ рд╕рднреА рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реИред рдЯрд┐рдВрдХрдСрдл рдХреЗ рдЕрдВрджрд░, рд╣рдо рдХреЗрд╡рд▓ рдЙрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣рдордд рд╣реБрдП рдЬрд╣рд╛рдВ рдШрдЯрдХ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм рдХреЗрд╡рд▓ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдпрд╛ рдкрд╛рд░реНрдЯреА рдХреЗ рд╕рд╛рде рд╕рдВрд╡рд╛рдж рдХрд░рдирд╛ред рдпрджрд┐ рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдбреЗрдЯрд╛ рдХреЛ рдмрд╛рд▓ рдШрдЯрдХреЛрдВ рдореЗрдВ рдХреИрд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП рдпрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдирдкреБрдЯ рдХреИрд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╡рд┐рдХрд▓реНрдк рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдРрд╕рд╛ рдорд╛рдорд▓рд╛ рд╣реИ - рддреЛ рдЕрдЧрд▓реЗ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдкрд░ рдЬрд╛рдПрдВред
рдЖрдк рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рд╕реЗ рд╕рднреА рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдЧреАрд▓рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрдВрдЬреЗрдХреНрд╢рди рдЯреЛрдХрди рдХреЗ рд╕рд╛рде рдЦреБрдж рдХреЛ рдкрд░рд┐рдЪрд┐рдд рдХрд┐рдпрд╛ рд╣реИ , рдЗрд╕рд▓рд┐рдП рдореИрдВ рддреБрд░рдВрдд рд╡реНрдпрд╛рдкрд╛рд░ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдЙрддрд░рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддрд╛ рд╣реВрдВред рдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рдЯреЛрдХрди рд╕реЗрд╡рд╛ рдХреА рдЬрд╛рдВрдЪ рдХреАред рдпрджрд┐ рдЖрдк рдПрдХ рдПрдХреАрдХрд░рдг рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕реЗрд╡рд╛ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ, рдмрд╕ рдПрдХ рдирдХрд▓реА рдмрдирд╛рдПрдВред
ts-mockito
, , . Angular ┬л ┬╗.
// export class MockPartyService extends PartyService { meetFriend(): IFriend { return {} as IFriend; } goToParty() {} toSay(some: string) { console.log(some); } } // ... TestBed.configureTestingModule({ declarations: [JokerComponent, MockComponent], providers: [{provide: PARTY_TOKEN, useClass: MockPartyService}], // }).compileComponents();
рд╡рд╣ рд╕рдм рд╣реИред .
. , тАФ , тАФ . , :
тАФ . , . тАФ .
рдкрд░рд┐рдгрд╛рдо
Angular, . , , ┬л┬╗.
, Angular - . HTTP-, , lazy-loading . Angular .