рд╡рд┐рдВрдбреЛрдЬ 10 рдкрд░ 0.1.4 рдореЗрдВ
errors?.required
рдХреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдЬрд╛рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
OS X 10.11.6 (El Capitan) рдкрд░ рднреА рд╣реЛ рд░рд╣рд╛ рд╣реИред
OS: OS X 10.11.6
рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╕рдВрд╕реНрдХрд░рдг: 0.1.4
рд╡реАрдПрд╕ рдХреЛрдб рд╕рдВрд╕реНрдХрд░рдг: 1.15.1
рдореБрдЭреЗ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╡рд┐рдВрдбреЛ 10 x64 рдкрд░ рднреА рдорд┐рд▓реА
рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╕рдВрд╕реНрдХрд░рдг 0.1.7
рд╡реАрдПрд╕ рдХреЛрдб рд╕рдВрд╕реНрдХрд░рдг 1.15.1
рдХреГрдкрдпрд╛ рдЗрд╕реЗ рдЬрд▓реНрдж рдареАрдХ рдХрд░реЗрдВ
рдпрд╣рд╛рдВ рднреА рдпрд╣реА рд╕рдорд╕реНрдпрд╛ред
рддреНрд░реБрдЯрд┐ рдпрд╣ рд╣реИ: 'рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛' рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рд╣реИрдВред 'NgModel' рдореЗрдВ рдРрд╕рд╛ рдХреЛрдИ рд╕рджрд╕реНрдп рдирд╣реАрдВ рд╣реИ 'ред
OS: macOS 10.13
рдПрдХреНрд╕рдЯреЗрдВрд╢рди: 0.1.7
рд╡реАрдПрд╕ рдХреЛрдб: 1.16.1
рдХреЛрдгреАрдп: 4.4.3
рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ: 2.5.2
рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИ! рдХреЛрдИ рднреА рд╕рдорд╛рдзрд╛рди?
рдХреНрдпрд╛ рдореБрдЭреЗ рдЗрд╕реЗ app.module рдпрд╛ рдореЗрд░реЗ рдШрдЯрдХ рдореЗрдВ рдЖрдпрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд╣рд╛рдВ рдлрд╝реЙрд░реНрдо рдореМрдЬреВрдж рд╣реИ?
@VladBozhinovski рджреНрд╡рд╛рд░рд╛ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд @ рдХреЛрдгреАрдп / рд░реВрдк рдЖрдпрд╛рдд рдЗрд╕реЗ рд╣рд▓ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред
рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░рдХрд╛рд░: https://github.com/angular/vscode-ng-language-service/issues/179
рд╣рд╛рдБ, рдореБрдЭреЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ ...
рдореИрдВ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИ .... рдХреЛрдИ рд╕рдорд╛рдзрд╛рди?
рдПрдХ рд╣реА рдореБрджреНрджрд╛, рдХрд┐рд╕реА рдХреЛ рднреА рдПрдХ рддрдп рдорд┐рд▓ рдЧрдпрд╛ рд╣реИ?
рдПрдХ рд╣реА рдореБрджреНрджрд╛ рдпрд╣рд╛рдБред рдЕрднреА рддрдХ рдХреЛрдИ рд╡рд┐рдЪрд╛рд░?
рдореБрдЭреЗ рднреА рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓рд╛
рдореБрдЭреЗ рднреАред
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдореИрдВ рдЕрдХреЗрд▓рд╛ рдирд╣реАрдВ рд╣реВрдБ :)
рдЗрддрдиреЗ рд╕рд╛рд░реЗ рд▓реЛрдЧреЛрдВ рдХреЛ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╣реБрдИред рдЖрдк рд▓реЛрдЧ рдЗрд╕реЗ 'рдИрдореЗрд▓? .Error.required' рдХреА рддрд░рд╣ рд░реЛрдХ рд╕рдХрддреЗ рд╣реИрдВ
@ Duanthse03268 рдиреЗ рд░реЗрдб рд▓рд╛рдЗрди рддреНрд░реБрдЯрд┐ рдХреЛ рджреВрд░ рдХрд░рдХреЗ рдХрд╛рдо рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдЕрднреА рднреА рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдВрд╕реЛрд▓ рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ, рдХрд┐рд╕реА рднреА рд╡рд┐рдЪрд╛рд░ рдХреНрдпреЛрдВ?
FoodFormComponent.html:9
ERROR TypeError: Cannot read property 'minlength' of undefined at Object.eval [as updateDirectives] (FoodFormComponent.html:10)
at Object.debugUpdateDirectives [as updateDirectives] (core.es5.js:13056) at checkAndUpdateView (core.es5.js:12236) at callViewAction
(core.es5.js:12601) at execComponentViewsAction (core.es5.js:12533) at checkAndUpdateView (core.es5.js:12242) at callViewAction
(core.es5.js:12601) at execComponentViewsAction (core.es5.js:12533) at checkAndUpdateView (core.es5.js:12242) at callWithDebugContext
(core.es5.js:13456)
рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдпреВ рдЖрдпрд╛рдд рдХрд░реЗрдВ
'@ рдХреЛрдгреАрдп / рд░реВрдкреЛрдВ' рд╕реЗ рдЖрдпрд╛рдд {FormMMule, Validators};
рдЗрд╕ рдереНрд░реЗрдб рдореЗрдВ рдХреЛрдИ рднреА рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рдореИрдВрдиреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдХрд┐ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рд╕рдХреЗ рдЙрддрдирд╛ рд╕рд░рд▓ рдмрдирд╛рдирд╛ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдХреЛрдИ рдФрд░ рдЗрд╕реЗ рдЧрдбрд╝рдмрдбрд╝ рди рдХрд░реЗ:
FormMule рдФрд░ Validators @ рдХреЛрдгреАрдп / рд░реВрдкреЛрдВ рд╕реЗ рдЖрдпрд╛рдд рдХрд┐рдП рдЧрдП рд╣реИрдВред рдореИрдВрдиреЗ @ Duanthse03268 рджреНрд╡рд╛рд░рд╛ рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдкрд░реАрдХреНрд╖рдг рднреА рдХрд┐рдпрд╛, рдФрд░ рди рдХреЗрд╡рд▓ рдпрд╣ рд▓рд╛рд▓ рд░реЗрдЦрд╛ рдХреЗ рдореБрджреНрджреЗ рдХреЛ рд╣рд▓ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИ рдЬрдм myField рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрддрд╛ рд╣реИ (TypeError: null рдХреА рд╕рдВрдкрддреНрддрд┐ 'рдЖрд╡рд╢реНрдпрдХ' рдирд╣реАрдВ рдкрдврд╝ рд╕рдХрддрд╛ рд╣реИ) рдпрджрд┐ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ред '' 'рддреНрд░реБрдЯрд┐рдпреЛрдВ' рдХреЗ рдмрд╛рджред
рдореЗрд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдмрд┐рдирд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рд╕рдВрдкрд╛рджрдХ (VSCode) рдореЗрдВ (рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЧрд▓рдд) рд▓рд╛рд▓ рд░реЗрдЦрд╛ рдХреЛ рдмрд░рдХрд░рд╛рд░ рд░рдЦрддрд╛ рд╣реИред рд╡рд┐рдЪрд╛рд░рд╛рдзреАрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рд╕реВрдЪреА (рдмрд╛рдХреА рд╕рдм рдЖрдк рдмрд╕ 'рдПрдирдЬреА рдПрдирдЬреА ...' рдХреЛ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП):
app.module.ts
app.component.ts
app.component.html
рд╕рдВрд╕реНрдХрд░рдг:
рдПрдХреНрд╕рдЯреЗрдВрд╢рди: 0.1.7
VSCode: 1.19.1
рдХреЛрдгреАрдп рд╕реАрдПрд▓рдЖрдИ: 1.6.3
рдиреЛрдб: 9.2.1
OS: macOS 10.12.6
рдХреЛрдгреАрдп: 5.1.3
рдХреНрд░реЛрдо: 63.0.3239.84
рдЖрдкрдиреЗ 'myfield? .Error.required' рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛?
рдореИрдВрдиреЗ рдпрд╣ рдХреЛрд╢рд┐рд╢ рдХреА, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдЕрдкрдиреА рдкрд┐рдЫрд▓реА рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рд▓рд┐рдЦрд╛ рдерд╛: "рди рдХреЗрд╡рд▓ рдпрд╣ рд▓рд╛рд▓ рд░реЗрдЦрд╛ рдХреЗ рдореБрджреНрджреЗ рдХреЛ рд╣рд▓ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИ рдЬрдм myField рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрддрд╛ рд╣реИ (TypeError: рдкрдврд╝ рдирд╣реАрдВ рд╕рдХрддреЗ рд╕рдВрдкрддреНрддрд┐ 'рдЖрд╡рд╢реНрдпрдХ' рд╢реВрдиреНрдп ' ) "ред
рдЗрд╕рд▓рд┐рдП, рд╡рд┐рд╕реНрддреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, 'myField; .errors.required' рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрдкрд░реЛрдХреНрдд рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдХреЛ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрдиреЗ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИред '?' рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рдмрд┐рдирд╛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдпрд╣ рдХреЛрдб рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 'рддреНрд░реБрдЯрд┐рдпреЛрдВ' рдХреЗ рдмрд╛рдж рд▓рд┐рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдлрд┐рд░ рднреА рд╕рдВрдкрд╛рджрдХ рдореЗрдВ рдЧрд▓рдд рд▓рд╛рд▓ рд░реЗрдЦрд╛ рдХреЗ рдореВрд▓ рдореБрджреНрджреЗ рдХреЛ рд╣рд▓ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдпрд╣ рдмреЗрд╣рдж рдХрд╖реНрдЯрдкреНрд░рдж рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд▓рд╛рд▓ рд░реЗрдЦрд╛рдПрдБ рдЕрднреА рднреА рд╣реИрдВ рд▓реЗрдХрд┐рди рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛рдо рдХрд░рддреА рд╣реИред рдореИрдВ joonashak рдХреЗ рд╕рд╛рде рд╕рд╣рдордд рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рд╕реНрддреБрдд рд╕рдорд╛рдзрд╛рди рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рджреЛрдиреЛрдВ рд╕реНрд╡рд░реВрдкреЛрдВ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рд╕реЗ рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред
рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд┐рдпрд╛:
рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдЗрд╕рд╕реЗ рдЖрдкрдХреЛ рдорджрдж рдорд┐рд▓реА рд╣реЛрдЧреАред
рдХреЗрд╡рд▓ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб :(
IntelliJ рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рд╣реА рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред @Ahnset рджреНрд╡рд╛рд░рд╛ рд╕рдорд╛рдзрд╛рди рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд┐рдпрд╛ред рдЬрд╛рдирдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ рдХрд┐ рдпрд╣ рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рдХреНрдпрд╛ рд╣реИ рдФрд░ рдпрд╣ рдЕрдм рдХреИрд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣реА рд╣реИ?
рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рдпрд╣ рддреНрд░реБрдЯрд┐ рд╣рд░ рдмрд╛рд░ рдЬрдм рдЖрдк рдХрд┐рд╕реА рд╕рдВрдкрддреНрддрд┐ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ 'рдХрд┐рд╕реА' рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реЛрддреА рд╣реИред рдПрдХ рдЕрдиреНрдп рд╕рдорд╛рдзрд╛рди рдмреНрд░реИрдХреЗрдЯ рд╕рдВрдкрддреНрддрд┐ рдПрдиреЛрдЯреЗрд╢рди, рдХреНрд▓рд╛рдЗрдВрдЯрдлрд╝рд░реНрд╕реНрдЯрдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ?
рдЗрд╕рдХрд╛ рд╕рдмрд╕реЗ рдмреБрд░рд╛, vscode рдХреЗ рдирд╡реАрдирддрдо рдЕрджреНрдпрддрди рдХреЗ рд╕рд╛рде, рдореЗрд░реА рдлрд╝рд╛рдЗрд▓ рдЯреНрд░реА рдПрдХ рдХреНрд░рд┐рд╕рдорд╕ рдЯреНрд░реА рдХреА рддрд░рд╣ рдмрди рдЧрдИ рд╣реИ: christmas_tree:
@adickenscheidt рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдорд╣рд╛рди рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЕрдм рдХреЗ рд▓рд┐рдП рдЧреВрдВрдЧрд╛ рд╕рд╣рдордд рд╣реВрдБред
рд╣рдЯрд╛рдП рдЧрдП рдХреЛрдгреАрдп рднрд╛рд╖рд╛ рд╕реЗрд╡рд╛ ...
@ Duanthse03268 рдЖрдкрдХрд╛ рдХрд╛рд░реНрдп рдХрд╛рд░реНрдп! рдзрдиреНрдпрд╡рд╛рджред
@adickenscheidt
рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рд╕рдорд╛рдзрд╛рди рдХрд╛рдо рдзрдиреНрдпрд╡рд╛рдж
рдЗрд╕рдиреЗ рдХрд╛рдо рдХрд░ рджрд┐рдпрд╛ред рдмрд╣реБрдд рд╕рд░рд╛рд╣рдирд╛ рдХреА @ Duanthse03268
@ Duanthse03268 рдЖрдкрдХрд╛ рдХрд╛рд░реНрдп рдХрд╛рд░реНрдп! рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ?
рдпрд╣ рдиреЗрд╕реНрдЯреЗрдб рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░реЙрдкрд░реНрдЯреА рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ
<mat-select [(ngModel)]="object?.nestedObject?.property" name="property" #property="ngModel">
object?.object?.property
рдкрд░ рд╕реБрдкрд░рдХреЛрд▓ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реЛ рд░рд╣реА рд╣реИрдВ
рдореИрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рдмрджрд╕реВрд░рдд рд▓реЗрдХрд┐рди рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
name?.errors && name?.errors['required']
email.errors ['рдЖрд╡рд╢реНрдпрдХ'] рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд┐рдпрд╛
@ guignol1981 рд╕реЙрд▓реНрдпреВрд╢рди рдиреЗ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд┐рдпрд╛ред
рдореЗрд░реЗ рд▓рд┐рдП рдЗрд╕ рдХрд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛:
рдХреЗрд╡рд▓ рддрддреНрд╡ рдирд╛рдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рдирд┐рд╢рд╛рдиред рдпрд╣ рдЗрддрдирд╛ рдмрджрд╕реВрд░рдд рдирд╣реАрдВ рд╣реИрдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╣реА рдореБрджреНрджрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рдиреЛрдВ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдиреЗ рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ:
"рдлрд╝реЙрд░реНрдо? .рдЧреЗрдЯ ('рдирд╛рдо')ред рддреНрд░реБрдЯрд┐рдпрд╛рдБ редrequired"
"рдлрд╝реЙрд░реНрдо редрдЧреЗрдЯ ('рдирд╛рдо')ред рддреНрд░реБрдЯрд┐рдпрд╛рдВред ['рдЖрд╡рд╢реНрдпрдХ']"
"рдлрд╝реЙрд░реНрдо? рднреВрд▓ ('рдирд╛рдо')ред рддреНрд░реБрдЯрд┐рдпрд╛рдВ?
рдирдорд╕реНрдХрд╛рд░ рдЗрд╕реЗ рдРрд╕реЗ рд╣реА рдЖрдЬрдорд╛рдПрдБред
рдлреЙрд░реНрдо.рд╢рд╣рд░ ('рдЖрд╡рд╢реНрдпрдХ');
рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣реА рдХрд╛рдо рдХрд┐рдпрд╛ред рдзрдиреНрдпрд╡рд╛рдж @antonheck
рдХреБрдЫ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рд╣реИрдВ, рдкреНрд░рддреНрдпреЗрдХ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рд╣реИ, рд╣рд╛рдБред рд▓реЗрдХрд┐рди рд╡рд╣ рдореБрджреНрджрд╛ рдирд╣реАрдВ рд╣реИред рдореБрдЭреЗ рдЕрдкрдирд╛ рдХреЛрдб рдЕрд▓рдЧ рд╕реЗ рдирд╣реАрдВ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрд┐рд╕рдореЗрдВ рдмрджрд╕реВрд░рдд, рд╣реИрдХреА рд╕рд┐рдВрдЯреЗрдХреНрд╕ рд╢рд╛рдорд┐рд▓ рд╣реИ, рдХреЗрд╡рд▓ рдПрдХ рдЖрдИрдбреАрдИ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛ рдЕрдкреАрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЬрдм рдореИрдВрдиреЗ рдЬреЛ рд▓рд┐рдЦрд╛ рдерд╛ рд╡рд╣ рд╢реБрд░реВ рд╕реЗ рд╣реА рд╕рд╣реА рдерд╛ред
рдореЗрд░реЗ рдкрд╛рд╕ рд╕рдорд╛рди рдХреЛрдб рд╡рд╛рд▓реА рд╕рдорд╛рди рд╕рдорд╕реНрдпрд╛ рдФрд░ рд╕рдВрджреЗрд╢ рд╣реИ:
class MyComponent {
form: FormGroup;
}
рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреА рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рд╕рд╛рде:
<app-errors [control]="form.controls.email">
рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ :
рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ 'рдИрдореЗрд▓' рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рд╣реИред '__type' рдореЗрдВ рдРрд╕рд╛ рдХреЛрдИ рд╕рджрд╕реНрдп рдирд╣реАрдВ рд╣реИ
рд╕рдорд╕реНрдпрд╛ рдкреНрд░рдХрд╛рд░ рдХреЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рдХрд╛рд░рдг рд╣реЛрддреА рд╣реИ рдЬреИрд╕реЗ (рдпрд╣ AbstractControl рдпрд╛ рдкрд╛рдареНрдпрдХреНрд░рдо рдХреЗ рдХреБрдЫ рдФрд░ рдХреЗ рд╕рд╛рде рд╣реЛрддрд╛ рд╣реИ):
{ [key: string]: AbstractControl; };
рдореЗрд░реЗ рдкрд╛рд╕ рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЛрдб (рд╡рд┐рдВрдбреЛрдЬрд╝) рдФрд░ рдХреЛрдгреАрдп рднрд╛рд╖рд╛ рд╕реЗрд╡рд╛рдУрдВ рдореЗрдВ рдпрд╣ рд╕рдВрджреЗрд╢ рд╣реИ, рд▓реЗрдХрд┐рди ng lint
ред
рдЕрдм рддрдХ рдХрд╛ рд╕рд░реНрд╡рд╢реНрд░реЗрд╖реНрда рд╕рдорд╛рдзрд╛рди:
"!!" рдХреЛ рдЯрд╛рд▓рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред
рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ,
рдореИрдВ рдЗрд╕ рддрд░рд╣ рд╕рдлрд▓ рд╣реБрдЖред
_from: https://github.com/angular/vscode-ng-language-service/issues/126#issuecomment -366200219_
рдзрдиреНрдпрд╡рд╛рдж tmrony, рдХрдИ рджрд┐рдиреЛрдВ рдХреЗ рдЦреЛрдЬ рдХреЗ рдмрд╛рдж рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди ...
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдРрд╕рд╛ рд╣реА рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреНрд░реБрдЯрд┐ рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХреЛ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ "AbstractControl" рдХреА "рддреНрд░реБрдЯрд┐рдпреЛрдВ" рдореЗрдВ рдХреЛрдИ рд╕рдЦреНрддреА рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧреБрдг рдирд╣реАрдВ рд╣реИ, рдпрд╣ " ValidationErrors " рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╣реИ
рддреЛ рдПрдХ рдорд╛рдиреНрдпрддрд╛ рдирд┐рдпрдо рдХреЛ рд╕реАрдзреЗ рдПрдХреНрд╕реЗрд╕ рдХрд░рдирд╛ рддреНрд░реБрдЯрд┐ рдкреИрджрд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЗрд╕реЗ рд╕реНрдХреНрд╡рд╛рдпрд░ рдмреНрд░реИрдХреЗрдЯ рдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рдХрд░рддреА рд╣реИред
(btw рднрд▓реЗ рд╣реА рдореИрдВ рд╕рддреНрдпрд╛рдкрди рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ рд╕реАрдзреЗ рдореБрдЭреЗ рд╕рдВрдХрд▓рди рддреНрд░реБрдЯрд┐рдпрд╛рдБ рдирд╣реАрдВ рдорд┐рд▓ рд░рд╣реА рд╣реИрдВ, рдРрдк рдареАрдХ рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ)
рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рджреВрд╕рд░рд╛ рддрд░реАрдХрд╛ рд╣реИ рдирд┐рдпрдВрддреНрд░рдг рдХрд╛ "рд╣реИрдпрд░" рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛:
<span *ngIf="(firstName.dirty || firstName.touched) && firstName.hasError('required')">First name is required.</span>
@ boban984 рд╕рдорд╛рдзрд╛рди рдиреЗ рдХрд╛рдо рдХрд┐рдпрд╛ ...ред
@adickenscheidt рд╕реЙрд▓реНрдпреВрд╢рди рдиреЗ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд┐рдпрд╛! рдзрдиреНрдпрд╡рд╛рдж
"price.errors ['рдЖрд╡рд╢реНрдпрдХ']" -> рдХрд╛рдо рдХрд┐рдпрд╛
"" price.errors.required "-> рдХрд╛рдо рдХрд┐рдпрд╛
"рдХреАрдордд ?errред?ред рдХреНрд░реЗрдпрд░реНрдб" рдХреЛ рднреА рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдореЗрд░рд╛ "рдлреБрд▓рдирд╛рдо? .errors .required" рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ
"price.errors ['рдЖрд╡рд╢реНрдпрдХ']" -> рдХрд╛рдо рдХрд┐рдпрд╛
рдпрд╣ рд╕рдВрдХрд▓рдХ 'рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рд╣реИ' рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрджрд┐ рддреНрд░реБрдЯрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рд╢реВрдиреНрдп рд╣реИ, рддреЛ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрдВрд╕реЛрд▓ рдкрд░ рддреНрд░реБрдЯрд┐ рд╣реЛрдЧреАред
@ boban984
рдпрд╣ рд╡рд┐рдЬреЗрддрд╛ рд╕рдорд╛рдзрд╛рди рдФрд░ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рд╣реИред
рдореБрдЭреЗ рдпрд╣рд╛рдВ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ hasError()
рдкрджреНрдзрддрд┐ рдХреА рдЦреЛрдЬ рдХрд░рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реБрдИ, рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕рд╢рд░реНрдд рдХреЗ рдЗрд░рд╛рджреЗ рдХреЛ рджрд┐рдЦрд╛рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рд╕реНрдкрд╖реНрдЯ рддрд░реАрдХрд╛ рд╣реИ рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ред
рд╣рд╛рд▓рд╛рдБрдХрд┐ ... рдХреЛрдИ рднреА рд╕рдорд╕реНрдпрд╛ рдХреЗ рдореВрд▓ рдХрд╛рд░рдг рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдФрд░ рдпрд╣ рдЕрдм рдПрдХ рд╡рд░реНрд╖ рдХреЗ рд▓рд┐рдП рднрд╛рд╖рд╛ рд╕реЗрд╡рд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдореБрджреНрджрд╛ рд╣реИред errors
рдкреНрд░реЙрдкрд░реНрдЯреА рдореЗрдВ рдПрдХ рдкреНрд░рдореБрдЦ рдЗрдВрдбреЗрдХреНрд╕ рд╕рд┐рдЧреНрдиреЗрдЪрд░ ( [key: string]: any
) рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ TS рдХреЛрдб рдореЗрдВ, рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ myControl.errors.anythingYouLike
рд╕рд╛рдл-рд╕рд╛рдл рд╕рдВрдХрд▓рди рдХрд░реЗрдЧрд╛, рдлрд┐рд░ рдЪрд╛рд╣реЗ рдЖрдк рдХрд┐рддрдиреЗ рднреА рд╕рдЦреНрдд-рдЭрдВрдбреЗ рд▓рдЧрд╛ рд▓реЗрдВред ред рдпрд╣ рд╕рд╣реА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рддрд░рд╣ рдПрдХ рдЗрдВрдбреЗрдХреНрд╕ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╣реЛрдиреЗ рдХреЗ рдкреВрд░реЗ рдмрд┐рдВрджреБ рдХреЛ рд░рдирдЯрд╛рдЗрдо рдкрд░ рдордирдорд╛рдиреА рдЧреБрдг рдмрдирд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рд╣реИ, рдФрд░ рдЙрдиреНрд╣реЗрдВ рдбреЙрдЯ-рдиреЛрдЯреЗрд╢рди рдпрд╛ рдЗрдВрдбреЗрдХреНрд╕-рдиреЛрдЯреЗрд╢рди рджреНрд╡рд╛рд░рд╛ рдПрдХреНрд╕реЗрд╕ рдХрд░рдирд╛ рд╣реИред рднрд╛рд╖рд╛ рд╕реЗрд╡рд╛ рдЗрдВрдбреЗрдХреНрд╕-рдиреЛрдЯреЗрд╢рди рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ, рдпрд╣реА рд╡рдЬрд╣ рд╣реИ рдХрд┐ control?.errors['required']
рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЧрд▓рдд рдХреЗ рд░реВрдк рдореЗрдВ рдбреЙрдЯ-рдиреЛрдЯреЗрд╢рди рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реИред
рддреАрди рд╕рдорд╛рдзрд╛рди:
<span *ngIf=" username.errors['email']">must be email</span>
<span *ngIf="!!username?.errors.email">must be email</span>
<span *ngIf="username.hasError('email')">must be email</span>
рдореБрдЭреЗ рддреАрд╕рд░рд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИ
@ boban984 рдорд╣рд╛рди рд╕рдорд╛рдзрд╛рди рдФрд░ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг
thnks, рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ !. ЁЯСНЁЯП╝
рдореИрдВ рдХрдВрд╕реЛрд▓ рдкрд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рд╕реЗ рдирдлрд░рдд рдХрд░рддрд╛ рд╣реВрдВ ors
рдирдорд╕реНрдХрд╛рд░ рдЗрд╕реЗ рдРрд╕реЗ рд╣реА рдЖрдЬрдорд╛рдПрдБред
рдлреЙрд░реНрдо.рд╢рд╣рд░ ('рдЖрд╡рд╢реНрдпрдХ');
рдпрд╣ рд╕рдмрд╕реЗ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рд╕рдорд╛рдзрд╛рди рдерд╛, рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рднреА рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: myForm.hasError ('рдЖрд╡рд╢реНрдпрдХ', 'myField')ред
рдзрдиреНрдпрд╡рд╛рдж @antonheck
рдирдорд╕реНрдХрд╛рд░ рдЗрд╕реЗ рдРрд╕реЗ рд╣реА рдЖрдЬрдорд╛рдПрдБред
рдлреЙрд░реНрдо.рд╢рд╣рд░ ('рдЖрд╡рд╢реНрдпрдХ');
рдпрд╣ рд╕рдмрд╕реЗ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рд╕рдорд╛рдзрд╛рди рдерд╛, рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рднреА рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: myForm.hasError ('рдЖрд╡рд╢реНрдпрдХ', 'myField')ред
рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд╛рджрдЧреА рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди @ boban984 рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛: "myField.hasError ('рдЖрд╡рд╢реНрдпрдХ')"ред :)
рдореИрдВрдиреЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдЗрд╕ рддрд░рд╣ рд╣рд▓ рдХрд┐рдпрд╛:
this.myForm = this.formBuilder.group({
field: ['', [Validators.required, Validators.maxLength(10)]]
});
get getField() { return this.myForm.get('field'); }
<div *ngIf="getField.errors" class="invalid-feedback">
<div *ngIf="getField.hasError('required')"> Text required </div>
<div *ngIf="getField.hasError('maxlength')"> Text maxLength </div>
</div>
рдореБрдЭреЗ рдорджрджрдЧрд╛рд░ рд╣реЛрдиреЗ рдХреА рдЙрдореНрдореАрдж рд╣реИред
рдмрд┐рд▓реНрдХреБрд▓ рд╕рд╣реА @bePericon рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ!
рдзрдиреНрдпрд╡рд╛рдж!
<input type="text" formControlName="name" class="form-control" placeholder="Full name">
<div *ngIf="submitted && f['name'].errors" class="alert alert-danger">
<div *ngIf="f['name'].errors.required">Full Name is required</div>
</div>
рдЗрд╕рдиреЗ рдореЗрд░реЗ рд▓рд┐рдП рдХреЛрдгреАрдп 7 рдореЗрдВ рдХрд╛рдо рдХрд┐рдпрд╛
рддреЛ рджреЛ рд╕рд╛рд▓ рдХреЗ рдмрд╛рдж, рдпрд╣ рддрдп рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ? ЁЯдг
рд╕рдВрдмрдВрдзрд┐рдд: https://github.com/angular/vscode-ng-language-service/issues/110
рддреЛ рджреЛ рд╕рд╛рд▓ рдХреЗ рдмрд╛рдж, рдпрд╣ рддрдп рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ? ЁЯдг
рд╕рдВрдмрдВрдзрд┐рдд: # 110
рдпрд╣ рдмрдЧ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдареАрдХ рдЙрд╕реА рддрд░рд╣ рд╣реИ рдЬреИрд╕реЗ рдЗрд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП
рдпрджрд┐ рдпрд╣ рдЕрдкреЗрдХреНрд╖рд┐рдд рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╣реИ, рддреЛ рдХреНрдпрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЛ рдЕрджреНрдпрддрди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ? (рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рджреЗрдЦреЗрдВ)ред
рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ ngModel
рдХреЗ рдХрдЪреНрдЪреЗ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдПрдХреНрд╕реЗрд╕рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдЗрд╕ рдзрд╛рдЧреЗ рдиреЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рд╣реИ рд╡реЗ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рддрдп рд╣реИ? рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рднреА рдХрдИ рдмрд╛рд░ рд╣реИрд░рд┐рд╕рд░ рдЙрдореНрд░ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд┐рдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЕрдм рдореИрдВ рддреНрд░реБрдЯрд┐ рдХреЛ рджреЛрд╣рд░рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред myControl.errors.maxlength
рдореЗрд░реЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХрд╛ рд▓рд╛рд▓ рдирд╣реАрдВ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ред рдпрд╣ рднрд╛рд╖рд╛ рд╕реЗрд╡рд╛ рд╡рд┐рд╕реНрддрд╛рд░ 0.801.1 рдХреЗ рд╕рд╛рде рд╣реИ, рдЬреЛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ v8.1.x рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдпрджрд┐ рдпрд╣ рдорджрдж рдХрд░рддрд╛ рд╣реИред
@ thw0rted рддреЛ, myControl.errors.required
рдФрд░ .pattern
(рдФрд░ рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рдЗрдирдкреБрдЯ рдЯреИрдЧ рдкрд░ required
рд╡рд┐рд╢реЗрд╖рддрд╛ рдЫреВрдЯ рдЧрдИ, рдЬреЛ рдПрдХ рдмрдбрд╝реА рд╡рд┐рдлрд▓рддрд╛ рдХрд╛ рдХрд╛рд░рдг рдмрди рд░рд╣реА рдереА), рд╡реЗ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдХрд╛рдлреА рдХрд╛рдо рд╣реИред
Required
рдЬреНрдпрд╛рджрд╛рддрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдХреБрдЫ рдЕрдЬреАрдм рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдереАрдВ рдЬреЛ рдкреЙрдк рдЕрдк рд╣реБрдИрдВ (рдЙрдиреНрд╣реЗрдВ рдХреИрдкреНрдЪрд░ рдХрд░рдиреЗ рд╕реЗ рдЪреВрдХ рдЧрдП рдФрд░ рд╡реЗ рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдЕрд╕рдВрдЧрдд рд╣реИрдВ), рдФрд░ pattern
рдЖрдЧ рдЬрдм рдкреИрдЯрд░реНрди рдЧрд▓рдд рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИ рдЬрдм рдкреИрдЯрд░реНрди рд╕рд╣реА рд╣реИред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореЗрд░реЗ рдкрд╛рд╕ рд╕рдорд╛рди vsCode рднрд╛рд╖рд╛ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рд╣реИ, рдФрд░ рдореИрдВ рдЕрднреА рднреА рд╕реНрдХреНрд╡рд┐рдЧреНрд▓рд┐рд╕ рдХреЛ рдЕрдЬреАрдм рд░реВрдк рд╕реЗ рджреЗрдЦрддрд╛ рд╣реВрдВред
рдкрд▓ рдХреЗ рд▓рд┐рдП .hasError
рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде рдЫрдбрд╝реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдФрд░ рд╢рд╛рдпрдж рдЕрднреА рднреА рдбреЙрдХреНрд╕ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрдЧрд╛, рдХрдо рд╕реЗ рдХрдо рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдкрд╖реНрдЯ / рд╕рд░реНрд╡реЛрддреНрддрдо рдЕрднреНрдпрд╛рд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рдпрд╣ рддреНрд░реБрдЯрд┐ рд╣рд░ рдмрд╛рд░ рдЬрдм рдЖрдк рдХрд┐рд╕реА рд╕рдВрдкрддреНрддрд┐ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ 'рдХрд┐рд╕реА' рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реЛрддреА рд╣реИред рдПрдХ рдЕрдиреНрдп рд╕рдорд╛рдзрд╛рди рдмреНрд░реИрдХреЗрдЯ рд╕рдВрдкрддреНрддрд┐ рдПрдиреЛрдЯреЗрд╢рди, рдХреНрд▓рд╛рдЗрдВрдЯрдлрд╝рд░реНрд╕реНрдЯрдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ?
рдЗрд╕рдиреЗ рдореЗрд░реЗ рд▓рд┐рдП рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рджреВрд░ рдХрд░ рджрд┐рдпрд╛ред рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП, рдХреЛрдб рддрдм рднреА рдХрд╛рдо рдХрд░рддрд╛ рдерд╛ рдЬрдм рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд░реЗрдЦрд╛рдВрдХрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдореБрдЭреЗ рдЕрдкрдиреЗ рдХреЛрдб рдореЗрдВ рд▓рд╛рд▓ рд░реЗрдЦрд╛рдПрдВ рджреЗрдЦрдирд╛ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИред
рд╣рд╛рдВ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдХреБрдВрдЬреА рдореЗрдВ рдбрд╛рд▓рдиреЗ рд╕реЗ рд▓рд╛рд▓ рд░реЗрдЦрд╛рдПрдВ рдирд┐рдХрд▓ рдЬрд╛рддреА рд╣реИрдВред
рд▓реЗрдХрд┐рди рдЖрдк рдЗрд╕рдХреЗ рд╕рд╛рде рд╕рд╣реА рд╡рд░реНрддрдиреА рдФрд░ рд╕реНрд╡рдд: рдкреВрд░реНрдг рд╣реЛрдиреЗ рдЬреИрд╕реА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рдЦреЛ рджреЗрддреЗ рд╣реИрдВред
рд╣реИрд╕рд░реНрд░реЛрдЯ () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ рдлреЙрд░реНрдо рдХреЗ рдЪрд╛рдЗрд▓реНрдб рдХрдВрдЯреНрд░реЛрд▓ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдбреЙрдЯ рдПрдХреНрд╕реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЬреИрд╕реЗ
class MyComponent { form: FormGroup; }
рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреА рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рд╕рд╛рде:
<app-errors [control]="form.controls.email">
рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ :
рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ 'рдИрдореЗрд▓' рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рд╣реИред '__type' рдореЗрдВ рдРрд╕рд╛ рдХреЛрдИ рд╕рджрд╕реНрдп рдирд╣реАрдВ рд╣реИ
рд╕рдорд╛рдзрд╛рди рд╣реЛрдЧрд╛:
<app-errors [control]="form.get('email')">
рд╡рд╣реА рдореБрджреНрджрд╛ред
f.email.errors.email.required рдлреЗрд▓
!! f.email.errors.email.required рдлреЗрд▓
f.email?.errors.email.required рд╡рд┐рдлрд▓
fред .email .errors.email.required рд╡рд┐рдлрд▓
f.email.errorред ['рдЖрд╡рд╢реНрдпрдХ'] рд╡рд┐рдлрд▓
f.email?.error.I'required '] рд╡рд┐рдлрд▓
рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд┐рдпрд╛:
f ['рдИрдореЗрд▓']ред рддреНрд░реБрдЯрд┐рдпрд╛рдБ
Https://github.com/angular/angular/pull/33884 рдХреЗ рд╕рд╛рде рддрдп рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП
рдирд┐рд╖реНрдХреНрд░рд┐рдпрддрд╛ рдХреЗ рдХрд╛рд░рдг рдпрд╣ рдореБрджреНрджрд╛ рд╕реНрд╡рддрдГ рдмрдВрдж рд╣реЛ рдЧрдпрд╛ рд╣реИред
рдпрджрд┐ рдЖрдк рдПрдХ рд╕рдорд╛рди рдпрд╛ рд╕рдВрдмрдВрдзрд┐рдд рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдПрдХ рдирдпрд╛ рдореБрджреНрджрд╛ рджрд░реНрдЬ рдХрд░реЗрдВред
рд╣рдорд╛рд░реА рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╡рд╛рд░реНрддрд╛рд▓рд╛рдк рд▓реЙрдХрд┐рдВрдЧ рдиреАрддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдкрдврд╝реЗрдВред
_ рдпрд╣ рдХреНрд░рд┐рдпрд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдмреЙрдЯ рджреНрд╡рд╛рд░рд╛ рдХреА рдЬрд╛рддреА рд╣реИ ред_
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд┐рдпрд╛:
рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдЗрд╕рд╕реЗ рдЖрдкрдХреЛ рдорджрдж рдорд┐рд▓реА рд╣реЛрдЧреАред