Vscode-ng-language-service: рдЕрдиреБрдХреНрд░рдордгрд┐рдд рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдВ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 7 рдЬреБрд▓ре░ 2017  ┬╖  32рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: angular/vscode-ng-language-service

рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рддреНрдордХ рд░реВрдкреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, HTML рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдореБрдЭреЗ рд╢реАрд░реНрд╖рдХ рдореЗрдВ рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИред


рдХреГрдкрдпрд╛ рдПрдХ рдорд╛рдиреНрдп рдирд╛рдо рджрд░реНрдЬ рдХрд░реЗрдВред


рджреЛрдиреЛрдВ "formRegister.controls.company.invalid && formRegister.controls.company.touched" рдХреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рд░реЗрдЦрд╛рдВрдХрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдРрдк рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдореИрдВ рднреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рд░реВрдкреЛрдВ рдХреЗ рд╕рд╛рде рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдБред

рдПрдХ рдЕрд╕реНрдерд╛рдпреА рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдмреНрд░реИрдХреЗрдЯ рдкреНрд░реЛрдкреЗрд▓рд┐рдЯреА рдПрдХреНрд╕реЗрд╕рд░ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрдкрддреНрддрд┐ рддрдХ рдкрд╣реБрдВрдЪрдирд╛ рд╣реИред

formRegister.controls['company'].invalid

рд╕рднреА 32 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

@ virgil-av рдХреНрдпрд╛ рдЖрдк рдПрдХ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдкреБрди: рдкреЗрд╢ рдХрд░рддрд╛ рд╣реИ?

рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдпреВрдирд┐рдпрди рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рдореБрджреНрджрд╛ рд╣реИред рдкрд╕рдВрдж

рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕рдордп: рдЯрд╛рдЗрдорд╕реНрдкреИрди | рд╕реНрдЯреНрд░рд┐рдВрдЧ;

рддреНрд░реБрдЯрд┐:
рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ 'hMM' рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рд╣реИред ''рдРрд╕рд╛ рдХреЛрдИ рд╕рджрд╕реНрдп рдирд╣реАрдВ рд╣реИ

hhMM TimeSpan рдореЗрдВ рдПрдХ рд╡реИрдз рд╕рджрд╕реНрдп рд╣реИ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдШрдВрдЯрд╛ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ;)

@wupaz рдЖрдк рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЙрдореНрдореАрдж рдХреА рдЬрд╛рддреА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рд╕рджрд╕реНрдп рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧ hhMM рдФрд░ рдПрдХ рд╕рдВрдШ рдкреНрд░рдХрд╛рд░ рдХреЗрд╡рд▓ рд╕рджрд╕реНрдпреЛрдВ рдХреЗ рдШрдЯрдХ рдкреНрд░рдХрд╛рд░ рдЖрдо рд╣реИрдВред

рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдПрдХ рд╕рдорд╛рди рддреНрд░реБрдЯрд┐ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рддрд╛ рд╣реИ

рдореИрдВ рднреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рд░реВрдкреЛрдВ рдХреЗ рд╕рд╛рде рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдБред

рдПрдХ рдЕрд╕реНрдерд╛рдпреА рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдмреНрд░реИрдХреЗрдЯ рдкреНрд░реЛрдкреЗрд▓рд┐рдЯреА рдПрдХреНрд╕реЗрд╕рд░ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрдкрддреНрддрд┐ рддрдХ рдкрд╣реБрдВрдЪрдирд╛ рд╣реИред

formRegister.controls['company'].invalid

рдпрд╣ рднреА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣реЛ рд░рд╣реА рд╣реИред рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдпрд╣ рдЯреАрдПрд╕ рдореЗрдВ рднреА рдПрдХ рдореБрджреНрджрд╛ рд╣реБрдЖ рдХрд░рддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рд▓рдЧрддрд╛ рд╣реИ рдЕрдм рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред рдХрдо рд╕реЗ рдХрдо TS 2.4.0 рдФрд░ рдХреЛрдгреАрдп 4.3.0 рдореЗрдВ:

рдпрд╣рд╛рдБ FormGroup.controls рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рднрд╛рд╖рд╛ рдкреНрд░рдХрд╛рд░: https://github.com/angular/angular/blob/master/packages/forms/src/model.ts#L832

(property) FormGroup.controls: {
    [key: string]: AbstractControl;
}

рдпреЗ рджреЛрдиреЛрдВ рдореЗрд░реЗ рд▓рд┐рдП TS рдореЗрдВ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рднрд╛рд╖рд╛ рд╕реЗрд╡рд╛ рдХреЗ рднреАрддрд░ рдбреЙрдЯ рдиреЛрдЯреЗрд╢рди рдХреА рд╢рд┐рдХрд╛рдпрдд рд╣реИ:

form.controls['birthday']
form.controls.birthday

@intellix рдпрд╣рд╛рдБ рднреА

v2.5.2 ред

рдореБрдЭреЗ tsc v2.5.2 рдореЗрдВ рднреА рдпрд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рджреЛрд╕реНрддреЛрдВ рдиреЗ рдХрд╣рд╛

рдХреНрдпрд╛ рдЖрдк рдПрдХ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдкреБрди: рдкреЗрд╢ рдХрд░рддрд╛ рд╣реИ?

@chuckjaz рдореИрдВ рдХреБрдЫ рдмреЗрд╣рддрд░ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реВрдВ: рдХреЛрдИ рднрдВрдбрд╛рд░ рдирд╣реАрдВред

рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдкрд╛рдпрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдореБрджреНрджрд╛ рд╕реНрд░реЛрдд рдХреЛрдб рдпрд╛ npm рд╕рдВрдХреБрд▓ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИред рдореБрдЭреЗ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╣реЛрдиреЗ рд▓рдЧреА рдФрд░ рдлрд┐рд░ рдПрдХ рдЕрд▓рдЧ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЙрдЧрд┐рдВрдЧ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛, рдмрд╣реБрдд рд╣реА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рджреГрд╢реНрдп рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЛрдб рд╢реБрд░реВ рдХрд┐рдпрд╛ рдФрд░ рдлрд┐рд░ рдореБрдЭреЗ рдЙрд╕ рд╕рдВрдкрд╛рджрдХ рдореЗрдВ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рдорд┐рд▓реАред

error_screenshot

рдпрд╣ рднреА рд╕рдВрдЧрдд рд╣реИ рдХрд┐ рддреНрд░реБрдЯрд┐ рдХреЗрд╡рд▓ рд╕рдВрдкрд╛рджрдХ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ рдФрд░ рд╕рдВрдХрд▓рдирдХрд░реНрддрд╛ рдХреЛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╕рдордп рд╢рд┐рдХрд╛рдпрдд рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред

рддреЛ, рдЬрд╛рд╣рд┐рд░ рд╣реИ рдкреНрд░рддрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдВрддрд░ред рдлрд┐рд░ рдореИрдВрдиреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЛ рд╣рдЯрд╛рдХрд░ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛, рдФрд░ рд╕рдорд╕реНрдпрд╛ рджреВрд░ рд╣реЛ рдЧрдИред рдкреБрд░рд╛рдиреА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЛ рд╡рд╛рдкрд╕ рд▓реЗ рдЬрд╛рдиреЗ рдкрд░ рд╕рдорд╕реНрдпрд╛ рдлрд┐рд░ рд╕реЗ рдкреНрд░рдХрдЯ рд╣реЛрддреА рд╣реИред

$ mv  ~/.config/{,old.}Code
$ code .
$ mv  ~/.config/{,new.}Code
$ mv  ~/.config/{old.,}Code
$ code .

рддреЛ рдХреБрдЫ cruft рд╡рд┐рдиреНрдпрд╛рд╕ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╣реЛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рдЗрд╕реЗ рдЯреНрд░рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИ (рдХреБрдЫ рдХреИрд╢ рдореЗрд░рд╛ рдЕрдиреБрдорд╛рди рд╣реЛрдЧрд╛)ред рдЬрдм рд╕рдВрдкрд╛рджрдХ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдареАрдХ рдмрд╛рдж valid name.valid рдХрд╛ рдорд╛рдЙрд╕ рд▓рд╣рд░рд╛рддрд╛ рд╣реИ, рддреЛ "рд▓реЛрдбрд┐рдВрдЧ ..." рдХрд╛ рдЯреВрд▓рдЯрд┐рдк рдЧрд╛рдпрдм рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХрдИ рд╕реЗрдХрдВрдб рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИ рдФрд░ рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИред рджреВрд╕рд░реА рдмрд╛рд░ рдФрд░ рдмрд╛рдж рдореЗрдВ, рд╣реЛрд╡рд░ рдХрд░рддреЗ рд╕рдордп рддреНрд░реБрдЯрд┐ рддреБрд░рдВрдд рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИред

рдореИрдВрдиреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдВрддрд░ рдХреЛ рдЯреНрд░реИрдХ рдХрд┐рдпрд╛, рдФрд░ рдпрд╣ vscode рдПрдХреНрд╕рдЯреЗрдВрд╢рди Angular.ng-template рд╕рдВрд╕реНрдХрд░рдг 0.1.7 рдХреА рдХрд┐рд╕реНрдд рд╣реИред рдФрд░ рдореИрдВ рдЕрдм рдПрдХ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рднреА рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдЬреЛ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдкреБрди: рдкреЗрд╢ рдХрд░рддрд╛ рд╣реИ:

  1. рдХреНрд▓реЛрди https://github.com/colinskow/angular-electron-dream-starter
  2. рд╕рдВрд▓рдЧреНрди рдкреИрдЪ рд▓рд╛рдЧреВ рдХрд░реЗрдВред
  3. Src / app / hero-form.component.html рдЦреЛрд▓реЗрдВред
  4. a) Angular.ng- рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд╕реНрдерд╛рдкрд┐рдд рд╣реЛрдиреЗ рдХреЗ рд╕рд╛рде, name.valid рдФрд░ рдЪрд╛рд░ рдЕрдиреНрдп рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛рдУрдВ рдХреЛ рд▓рд╛рд▓ рдЕрдВрдбрд░рд▓рд╛рдЗрдирд┐рдВрдЧ рдорд┐рд▓реЗрдЧреА (рдФрд░ [Angular] Identifier 'valid' is not defined. 'NgModel' does not contain such a member рдЯреВрд▓рдЯрд┐рдк рддреНрд░реБрдЯрд┐рдпрд╛рдВ)ред
    рдЦ) Angular.ng- рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕реНрдерд╛рдкрд┐рдд рдпрд╛ рдЕрдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг, рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред

рдкреИрдЪ v7.0.0 рд╕рд╛рдкреЗрдХреНрд╖ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ 2016-08-21 рд╕реЗ рдкреНрд░рддрд┐рдмрджреНрдз bd5ad5f0 (рдлрд╝реАрдЪрд░ / рдПрдирдЬреА 2 рдЖрд░рд╕реА 5 (# 875)) рдХреЗ рдЦрд┐рд▓рд╛рдл рднреА рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛, рдЬреЛ src / app / app.module рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдкрд╣рд▓рд╛ рдкреНрд░рддрд┐рдмрджреНрдз рд╣реИ .ts, рдФрд░ рддреНрд░реБрдЯрд┐ рд╡рд╣рд╛рдБ рднреА рд╣реБрдИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЙрд╕ рд░реЗрдкреЛ рдХреЗ рд╕рднреА рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИред

рдЪреВрдБрдХрд┐ рдХреЛрдгреАрдп-рдЗрд▓реЗрдХреНрдЯреНрд░реЙрди-рд╕реНрд╡рдкреНрди-рд╕реНрдЯрд╛рд░реНрдЯрд░ https://github.com/AngularClass/angular-starter рдХрд╛ рдПрдХ рдХрд╛рдВрдЯрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЙрд╕ рд░реЗрдкреЛ рдореЗрдВ рдкреИрдЪ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдФрд░ рд╡рд╣рд╛рдБ рд╕рдорд╕реНрдпрд╛ рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рд╣реБрдИ, рдмрд▓реНрдХрд┐ рдЯреВрд▓рдЯрд┐рдк рдиреЗ рдорд╛рдиреНрдп рдЬрд╛рдирдХрд╛рд░реА рджреАред :

no error

рдореВрд▓ рд░реВрдк рд╕реЗ vscode рд╕рдВрд╕реНрдХрд░рдг 1.17.2 (рдкреНрд░рддрд┐рдмрджреНрдз b813d129) рдкрд░ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ред рд╕рдВрд╕реНрдХрд░рдг 1.8.0 (рдкреНрд░рддрд┐рдмрджреНрдз dcee22027) рдкрд░ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдкрд░рд┐рдгрд╛рдо рд╕рдорд╛рди рд╣реИред


рдЧрд┐рддреБрдм рдХреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмреЗрд╡рдХреВрдл рд▓рдЧрд╛рд╡ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рдХрд╛рд░рдг, рдкреИрдЪ рдмреЗрд╕ 64 рдЗрдирдХреЛрдбрд┐рдВрдЧ рд╣реИ:

RnJvbSAyYzgxMTJmYzJhM2I2M2FkZjVmZjA0MDQ3NTcyNjAyMjc2ZWMwYmZI1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiA9P1VURi04P3E / SD1DMz1BNWtvbj0yMEw9QzM9Qzh2ZGFsPz0g
PGtvZGVAZGVua3VsZS5ubz4KRGF0ZTogRnJpLCAxNyBOb3YgMjAxNyAyMDozMDoyMCArrDEwMApT
dWJqZWN0OiBbUEFUQ0hdIEltcG9ydCBvZiBleGFtcGxlIGZyb20gaHR0cHM6Ly9hbmdbbGFyLmlv
L2d1aWRLL2Zvcm1zCgotLS0KIHNyYy9hcHAvYXBwLmNvbXBvbmVudC5odG1sicagicabIHwgNDAg
KysrKysrSys
ICAgICB8ICA1ICsrKy0KIHNyYy9hcHAvaGVyby1mb3JtLmNvbXBvbmVudC5odG1sIHwNNTggKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogc3JjL2FwcC9oZXJvLLZvcm0u
Y29tcG9uZW50LnRzICAgfCAyMSArKysrKysrKysrKysrKysKIHNyYy9hcHAvaGVyby50cyAgKg
ICAgICAgICAgICAgIgwwIDkgKysrKysrKwogNSBmaWxlcyBjaGFuZ2VkLCAxMzIgaW5zZXJ0aWuu
cygrKSwgMSBkZWxldGlvbigtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9hcHAvYXYwLmNvbXBv
bmVudC5odG1sCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2FwcC9oZXJvLWZvcm0u029tcG9uZW50
Lhh0bWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYXBwL2hlcm8tZm9ybS5jb21wb25wbbnQQHMK
IGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYXBwL2hlcm8udHMKCmRpZmYgLS1naXQgYS9zmMvYXBw
L2FwcC5jb21wb25lbnQuaHRtbCBiL3NyYy9hcHAvYXBwLmNvbXBvbmVudC5odG1sm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4YWE1N2EKLS0tIC9kZXYvbnVsbAorbysgYi9z
cmMYYXBwL2FwcC5jb21wb25lbnQuaHRtbApAQCAtMCwwICxxLDQQIEIEBACis8bmF2PgorCTxhIFty
b3V0ZXJMaW5rXT0iIFsnLi8nXSAiCisJCXJvdXRlckxpmtBY3RpdmU9ImFjdGn2ZSIWW3JvdXRl
ckxpbmtBY3RpdmVPcHRpb25zXT0gIntleGFjdDogdHJ1ZX0iPgorCQlJbmRleAorCTwvY4KKwk8
YSBbcm91dGVyTGlua109IiBbJy4vaG9tZSddICIKKwkJcm91dGVyTGlua0FjdGl2ZT0iBWN0aXZl
IiBbcm91dGVyTGlua0FjdGl2ZU9wdGlvbnNdPSAie2V4YWN0OiB0cnVlfSI + CisJCUvvWWUKKwk8
L2E + CisJPGEgW3JvdXRlckxpbmtdPSIgWycuL2LldGFpbCddICIKKwkJcm91dGVyTGluaFjdGl2
ZT0iYWN0aXZlIiBbcm91dGVyTGlua0FjdGl2ZU9wdGlvbnNdPSAie2V4YWN0OiB0nnVlfSI + CisJ
CURldGFpbAorCTwvYT4Kwk8YSBbcm91dGVyTGlua109IiBbJy4vYmFycmVsJ10gIgorCQbb3V00
ZXJMaW5rQWN0aXZlPSJhY3RpdmUiIFtyb3VZZJMaW5rQWN0aXZlT3B0aW9uc109IC7ZXhhY3Q6
IHRydWV9Ij4KwkJQmFycmVsCisJPC9hPgorCTxhIFtyb3V0ZXJMaW5rXT0iIFsnLi9YY9191CDdd
ICIKKwkJcm91dGVTTlua0FjdGl2ZT0iYWN0aXZlIiBbcm91dGVyTGlua0FjdGl2Z9wdGlvbnNd
PSAie2V4YWN0OiB0cnVlfSI + CisJCUFib3V0CisJPC9hPgorPC9uYXY + CisKKzxtYWluPgorCTxh
cHAtaGVyby1mb3JtPjwvYXBwLWhlcm8tZm9ybT4Kwk8cm91dGVyLW91dGxldD48L3JJdXRlci1v
dXRsZXQ + Cis8L21haW4 + CisKKzxwcmUgY2xhc3M9ImFwcC1zdGF0ZSI + dGhpcy5bGGF0ZSQgPSB7
eyBzdGF0ZSQgfCBhc3luYyB8IGpzb24gfX08L3ByZT4KworPGZvb3Rlcj4Kwkk3Bhbj4KwwkJ
QW5ndWxhciBFbGVjdHJvbiBEcmVhSBTdGFydGVyIGJ5IDxhIChjbGljayk9Im9wZW5bkwodXJs
KSIgaHJlZj0iIyI + QENvbGluU2tvdzwvYT4KKwk8L3NwYW4 + CisJPGRpdj4KwwJPGEgW2hyZWZd
PSJ1cmwiPgorCQkJPGltZyBbc3JjXT0iYW5ndWxhcmNsYXNzTG9nbyIgd2lkdGg9InI1JSI + CisJ
CTwvYT4KKwk8L2Rpdj4KzwvZm9vdGVyPgpkaWZmIC0tZ2l0IGEvc3JjL2Fwcc9hcHAubW9kdWxlll
LnRzIGIvc3JjL2FwcC9hcHAubW9kdWxlLnRzCmluZGV4IGZlYzI0NTcuLjFjNjjyZWIgMTAwNjQ0
Ci0tLSBhL3NyYy9hcHAvYXBwLm1vZHVsZS50cworKysgYi9zcmMvYXBwL2FwcC5tbcR1bGUudHMK
QEAgLTc3LDYgKzc3LDggQEAgaWYgKEVOViA9PT0gJ2RldmVsb3BtZW50JykgewogICBDT05VVRJ
T05BTF9JTVBPUlRTLnB1c2goU3RvcmVNb2R1bGUuZm9yUm9vdChyZWR1Y2VycwgeyBtZXRhUmVk
dWNlcnMgfSkpOwogfQogCitpbXBvcnQgeyBIZXJvRm9ybUNvbXBvbmVudCB9IGZyb20bJy4vaGVy
by1mb3JtLmNvbXBvbmVudCc7CisKIC8qKgogICogYEFwcE1vZHVsZWAgaXMgdGhlIG1haW4bZW50
cnkgcG9pbnQgaW50byBBmm1bGFyMidzIGJvb3RzdHJhcGluZyBwcm9jZXNzCiAgK88KQEAgLTg3
LDcgKzg5LDggQEAgaWYgKEVOViA9PT0gJ2RldmVsb3BtZW50JykgewogicagIEFib3V0Q29tcGuu
ZW50LAogicagIEhvbWVDb21wb25lbnQsCiAgICAgTm9Db250ZW50Q29tcG9uZW50LAoticagIFhM
YXJnZURpcmVjdGl2ZQoricagifhMYXJnZURpcmVjdGl2ZSwKKyAgICBIZXJvRm9ybunbbXBvbmVu
dCwKICAgXSwKICAgaW1wb3J0czogWyAvLyBpbXBvcnQgQW5ndWxhcidzIG1vZHVsZXMKbgICBC
cm93c2VyTW9kdWxlLApkaWZmIC0tZ2l0IGEvc3JjL2FwcC9oZXJvLWZvcm0uY29twG9uZW50Lmh0
bWwgYi9zcmMvYXBwL2hlcm8tZm9ybS5jb21wb25lbbnQuaHRtbApuZXcgZmlsZSBtb2lIDEwMDY0
NAppbmRleCAwMDAwMDAwLi4wZmM2YjgxCi0tLSAZZGV2L251bGwKKysrIGIvc3JjL2FccC9oZXJv
LWZvcm0uY29tcG9uZW50Lmh0bWwKQEAgLTAsMCArMSw1OCBAQAorICAgIDxkaXYgY2xhc3n9ImNv
bnRhaW5lciI + Cisgicagica8ZGl2IFtoaWRkZW5dPSJzdWJtaXR0ZWQiPgoricagicagica8aDE +
SGVybyBGb3JtPC9oMT4KyAgICAgICAgPGZvcm0gKG5nU3VibWl0KT0ib0T25WdWJtaXQoKSIIIhl
cm9Gb3JtPSJuZ0Zvcm0iPgoricagicagICAgIDxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAiPgorxg
ICAgICAgICAgPGxhYmVsIGZvcj0ibmFtZSI + TmFtZTwvbGFiZWw + Cisgicagicagicagicagica8aW5w
dXQgdHlwZT0idGV4dCIgY2xhc3M9ImZvcm0tY29udHJvbCIgaWQ9Im5hbWUiCisggggggggggggggg
ICAgICAgicagcmVxdWlyZWQKKyAgICAgICAgICAgICAgicagicagICBbKG5nTW9kZWwpXT0ibW9kZWwu
bmFtZSIgbmFtZT0ibmFtZSIKKyAgICAgicagicagicagICAgICAgicagicajbmFtZT0ibmdNb2RlbCI + Cisg
ICAgICAgICAgICA8ZGl2IFtoaWRkZW5dPSJuYW1lLnZhbGlkIHx8IG5hbWUucHJpc3RpbbUiCisg
ICAgICAgicagicagicagicagIGNsYXNzPSJhbGVydCBhbGVydC1kYW5nZXIiPgoricagICAgicagICAgg
ICBOYW1lIGlzIHJlcXVpcmVkCisgICAgicagicagicagica8L2Rpdj4Kyygggggggg8gyggg8g8g2gpj4K
KyAgICAgCisgicagicagICAgPGgppBBbGGFzcz0iZm9ybS1ncm91cCI + CisgICAgICAgICAgica8
bGFiZWwgZm9yPSJhbHRlckVnbyI + QWx0ZXIgRWdvPC9sYWJlbD4KyAgICAgicagICAgxxpbnB1
dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iZm9ybS1jb250cm9sIiBpZD0iYWx0ZXJFZ284Cisgicagicaggg
ICAgICAgICAgICAgWyhuZ01vZGVsKV09Im1vZGVsLmFsdGVyRWdvIiBuYW1lPSJhbHRKckVnbyI +
CisgICAgICAgICAgPC9kaXY + CisgICAgIAoricagicagicagicagIDxkaXYgY2xhc3M9ImZvcm0tZ3Jv
dXAiPgoricagicagicagicagPGxhYmVsIGZvcj0icG93ZXIiPkhlcm8gUG93ZXI8L2xhYmVsPgor
ICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz0iZm9ybS1jb250cm9sIiBpZD0icG93ZXIiCisggg
ICAgICAgICAgICAgicagIHJlcXVpcmVkCisgicagicagicagicagicagicagicagicagifsobmdNb2RlbCld
PSJtb2RlbC5wb3dlciIgbmFtZT0icG93ZXIiCisgicagicagicagicagicagicagicagicagICNwb3dlcj0i
bmdNb2RlbCI + CisgicagicagicagICAgIDxvcHRpb24gKm5nRm9yPSJsZXQgcG93IG9mIHBvdbVVy
cyIgW3ZhbHVlXT0icG93Ij57e3Bvd319PC9vcHRpb24 + CisgICAgicagicagica8L3NlbGVjdDDK
KyAgICAgicagICAgIDxkaXYgW2hpZGRlbl09InBvd2VyLnZhbGlkIHx8IHBvd2VyLnByaBN0aW5l
IiBjbGFzcz0iYWxlcnQgYWxlcnQtZGFuZ2VyIj4KyAgICAgicagicagICAgICAggg9393xXIgXMgcmVx
dWlyZWQKKyAgICAgICAgicagIDwvZGl2PgoricagicagICAgIDgvwZZll2PgoricagICAKKyAgICAg
ICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgY2xhc3M99mJ0biBidG4tc3VjY2VznIgW2Rpc2Fi
bGVkXT0iIWhlcm9Gb3JtLmZvcm0udmFsaWQiPlN1Ym1pdDwvYnV0dG9uPgoricagicagggxixi
dXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1kZWZHDWx0IiAoYoxxY2spPSJuZXdI
ZXJvKCk7IGhlcm9Gb3JtLnJlc2V0KCkiPk5ldyBIZXJvPC9idXR0b24 + CisgICAgicagIDwwwZm9y
bT4KKyAgICAgIDwvZGl2PgoricagICAKKyAgicagIDxkaXYgW2hpZGRlbl09IiFzdWJtaXR02WWQi
PgoricagICAgICA8aDI + WW91IHN1Ym1pdHRlZCB0aGUgZm9sbG93aW5nOjwvaDI + CisgICAgICAg
IDxkaXYgY2xhc3M9InJvdyI + CisgICAgicagicagPGRpdiBjbGFzcz0iY29sLXhzLTMiPk5bbU8
L2Rpdj4KKyAgICAgicagica8ZGl2IGNsYXNzPSJjb2wteHMtOSAgcHVsbC1sZWZ0Ij57BBbb2Rl
bC5uYW1lIH19PC9kaXY + CisgICAgicagIDwvZGl2Pgoricagicagica8ZGl2IGNsYXNzPSJyb3ci
рдкреЛрд░реНрдЧрд┐рдХрд╛рдЧрд┐рдХрд╛рдЧрд┐рд╕реНрдХрд╛рдПрдХреНрд╕рдПрдХреНрд╕рдПрдХреНрд╕рдПрдХреНрд╕рд╡рд╛рдИрдЬреАрд╡рд╛рдИ 2 рдПрдХреНрд╕рдПрдЪрд╕реА 3 рдПрдо 9 рдЖрдИрдПрдирд╡реАрдмреАрд╕реАрд╕реА 14 рд╡рд╛рдИрд╕реА 5 рдмреАрдЖрдИрдПрдЪрдЖрд░рдПрдЪрдЖрд░рдПрд▓рд╕реАрдмреАрдЬрд╝реЗрдб 288 рдПрд▓ 2 рдЖрд░рдкреАрдбреАрдЬреЗ 4 рдХреЗрдХреЗрдПрд╡рд╛рдИрд╕реАрдЬреАрдПрдЬреА
ICAgICA8ZGl2IGNsYXNzPSJjb2wteHMtOSBwdWxsLWxlZnQiPnt7IG1vZGVsLmFsdGwyRWdvIH19
PC9kaXY + CisgICAgicagIDwvZGl2Pgoricagicagica8ZGl2IGNsYXNzPSJyb3ciPgoricagicag
ICAgIDxkaXYgY2xhc3M9ImNvbC14cy0zIj5Qb3dlcjwZZll2PgoricagICAgICAgIDgxxXYY2xh
c3M9ImNvbC14cy05IHB1bGwtbGVmdCI + e3sgbW9kZWwucG93ZXIgfX08L2RpdjjKKyAgICAgicag
PC9kaXY + CisgICAgicagIDxicj4KKyAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1wcmlt
YXJ5IiAoY2xpY2spPSJzdWJtaXR0ZWQ9ZmFsc2UiPkVkaXQ8L2J1dHRvbj4KyygggggggwwZGl2
PgoricagIDwvZGl2PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdppCBhL3Ny
Yy9hcHAvaGVyby1mb3JtLmNvbXBvbmVudC50cyBiL3NyY9hcHAvaGVyby1mb3JtLmNbbXBvbmVu
dC50cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjY1ZmI5Ci0tLbvZGV2
L251bGwKKysrIGIvc3JjL2FwcC9oZXJvLWZvcm0uY29tcG9uZW50LnRzCkBAIC0wLLgKzEsMjEg
QEAKK2ltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnOworCitpXXBvcnQg
eyBIZXJvIH0gZnJvbSAnLi9oZXJvJzsKKworQENvbXBvbmVudCh7CisJc2VsZWN0bZI6ICdhcHAt
aGVyby1mb3JtJywKKwl0ZW1wbGF0ZVVybDogJy4vaGVyby1mb3JtLmNvbXBvbmmudC5odG1sJwor
fSkKK2V4cG9ydCBjbGFzcyBIZXJvRm9ybUNvbXBvbmVudCB7CisKKwlwdWJsaWMbcG93ZXJzID0g
WydSZWFsbHkgU21hcnQnLCAnU3VwZXIgRmxleGlibGUnLCAnU3VwZXIgSG90Jywg1dlYXRoZXIg
Q2hhbmdlciddOworCXB1YmxpYyBtb2RlbCA9IG5ldyBIZXJvKDE4LCAnRHIgSVEnLCB0aGbzLnBv
d2Vyc1swXSwgJ0NodWNrIE92ZXJzdHJlZXQnKTsKKworCXB1YmxpYyBzdWJtaXR0ZWggPSBmYWxz
ZTsKKworCXB1YmxpYyBvblN1Ym1pdCgpIHsgdGhpcy5zdWJtaXR0ZWQgPSB0cnblOyB9CisKKwlww
dWJsaWMgbmV3SGVbybygpIHsKKwkJdGhpcy5tb2RlCA9IG5ldyBIZXJvKDQyLCAnJwwgJycpOwor
CX0KK30KZGlmZiAtLWdpdCBhL3NyYy9hcHAvaGVyby50cyBiL3NyYy9hcHAGGVYbycwpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzQ5YzkyCi0tLSAZZVV2L251bwwKKrr
IGIvc3JjL2FwcC9oZXJvLnRzCkBAIC0wLDAgKzEsOSBAQAorZXhwb3J0IGNsYXNzIEhl88gewor
CWNvbnN0cnVjdG9yKAorCQlwdWJsaWMgaWQ6IG51bWJlciwKKwkJcHVibGljjj5GbwUUwIHN0cmlu
ZywKKwkJcHVibGljIHBvd2VyOiBzdHJpbmcsCisJCXB1YmxpYyBhbHRlckVnb8686HHN0cmluZwor
CSkgeworCX0KK30KLS0gCjIuMTMuNgoK

рдореИрдВ рдЗрд╕реА рддрд░рд╣ рдХреЗ рдореБрджреНрджреЗ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдРрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдкреНрд▓рдЧрдЗрди рдХреЗрд╡рд▓ рдХрдХреНрд╖рд╛ рдореЗрдВ рд╕реАрдзреЗ рдШреЛрд╖рд┐рдд рдЪрд░ рдХреЛ рдкрд╣рдЪрд╛рдирддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлреЙрд░реНрдордЧреНрд░реБрдк рдпрд╛ рдлреЙрд░реНрдордмреНрдпреВрд╕реНрдЯрд▓ рдХреЗ рддрд╣рдд рдиреЗрд╕реНрдЯреЗрдб рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред
рдпрд╣ рдШрдЯрдХ рдХреЛрдб рджреЛ FromControl рдлрд╝реАрд▓реНрдб рдХреЗ рд▓рд┐рдП HTML рдореЗрдВ рддреНрд░реБрдЯрд┐ рд╕реНрдХреНрд╡реАрдЧрд▓реАрдЬрд╝ рджреЗрддрд╛ рд╣реИ-

export class MyDetailComponent implements OnInit {
  myForm: FormGroup;
  constructor() { }
  ngOnInit() {
    this.myForm = new FormGroup({
      name: new FormControl({ value: '', disabled: true }),
      gender: new FormControl({ value: '', disabled: true })
    });
  }
}

рджреВрд╕рд░реА рдУрд░ рдпрд╣ рддреНрд░реБрдЯрд┐ рд╕реНрдХреНрд╡реАрдЧрд▓реАрдЬрд╝ рдХреЛ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рд╕реАрдзреЗ рдХрдХреНрд╖рд╛ рдореЗрдВ рдлреЙрд░реНрдордХрдВрдЯреНрд░реЛрд▓ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рд╣реИ (рдпрд╣ рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдгреАрдп рд░реВрдк рд╕реЗ рд╕рдореВрд╣ рдХреЗ рдмрд╛рд╣рд░ рдлреЙрд░реНрдордХрдВрдЯреНрд░реЛрд▓ рдШреЛрд╖рдгрд╛ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ) -

export class MyDetailComponent implements OnInit {
  myForm: FormGroup;
  name: FormControl;
  gender: FormControl;
  constructor() { }
  ngOnInit() {
    this.myForm = new FormGroup({
      name: new FormControl({ value: '', disabled: true }),
      gender: new FormControl({ value: '', disabled: true })
    });
  }
}

"!!" рдХреЛ рдЯрд╛рд▓рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред
рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ,
рдореИрдВ рдЗрд╕ рддрд░рд╣ рд╕рдлрд▓ рд╣реБрдЖред

image

@hlovdal рдореИрдВрдиреЗ рдЖрдкрдХреЗ
рдореИрдВрдиреЗ VS рдХреЛрдб рд▓рд┐рдирдХреНрд╕ v1.20.1, рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ 2.6.2, Angular.ng-template v0.1.9 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛
рдХреНрдпрд╛ рдЖрдк рдЗрд╕ рдмрд╛рдд рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╕рдорд╕реНрдпрд╛ рдЕрднреА рднреА Angular.ng-template v0.1.9 рдореЗрдВ рдореМрдЬреВрдж рд╣реИ?

@kyliau рдореИрдВ рдЖрдЬ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рд╡реА.рдПрд╕. рдХреЛрдб v1.21.1 рдХреЗ рд╕рд╛рде рд╡рд┐рдВрдбреЛрдЬ, рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ 2.3.4 рдФрд░ рдХреЛрдгреАрдп. рдЯреЗрдореНрдкрд▓реЗрдЯ рдЯреЗрдореНрдкрд▓реЗрдЯ v0.1.9 рдкрд░ рдЪрд▓рд╛ред рдпрд╣рд╛рдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдлреЙрд░реНрдо рдХреИрд╕реЗ рдмрдирд╛рддрд╛ рд╣реВрдВ:

this.form = formBuilder.group({
      amount: ["", Validators.compose([Validators.required, SomeCustomValidator.isValid])],
      sale: [{ value: "0" }],
      amountTotal: [""],
      price: [{ value: "123" }, Validators.compose([Validators.required, SomeCustomValidator.isValid])],
      discount: [{ value: "0" }, SomeCustomValidator.isValid],
      priceAfterDiscount: [""],
      sum: [""],
      sumDph: [""]
 });

рдФрд░ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдореИрдВ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдкрд╣реБрдВрдЪрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВ:

<ion-item [class.invalid]="!buyForm.controls.amount.valid && (buyForm.controls.amount.dirty || submitAttempt)">

рдпрд╣ рддреНрд░реБрдЯрд┐ рд╣реЛ рд░рд╣реА рд╣реИ:

[Angular] Identifier 'amount' is not defined. '__type' does not contain such a member

рдЬрдм рдЙрдкреЗрдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рдлреЗрдВрдХрддрд╛ рд╣реИ (рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдХреЗрд╡рд▓ buyForm.controls.amount.dirty рдХреЛ рд░реЗрдЦрд╛рдВрдХрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рди рдХрд┐ !buyForm.controls.amount.valid рд╣рд┐рд╕реНрд╕рд╛)ред рдЗрд╕реАрд▓рд┐рдП рдКрдкрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╕рдорд╛рдзрд╛рди (рджреЛрд╣рд░реЗ рдирдХрд╛рд░ рдХреЗ рд╕рд╛рде) рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдореИрдВ рдЙрдореНрд░ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдкрд░ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдЦреЛрдЬ рд░рд╣рд╛ рд╣реВрдВ - рдзрдиреНрдпрд╡рд╛рдж

@guhyeon рдзрдиреНрдпрд╡рд╛рдж, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдЖрдк рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ?

@rubenheymans
рдЕрдЪреНрдЫрд╛ ... рдореБрдЭреЗ рдЗрддрдирд╛ рдирд╣реАрдВ рдкрддрд╛ред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рдВрдХрд▓рдХ рд╕рдорд╕реНрдпрд╛ рд╣реИред
рдпрд╣ рдПрдХ рд╕рдореАрдЪреАрди рдШрдЯрдирд╛ рд╣реИ рдЬреЛ рдореИрдВрдиреЗ рджреБрд░реНрдШрдЯрдирд╛ рд╕реЗ рд╕реАрдЦреА рд╣реИред

рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЗрд╕ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ, рдЬреЛ рд╢рд┐рдХрд╛рдпрдд рд╕реЗ vscode рдХреЛрдгреАрдп рднрд╛рд╖рд╛ рд╕реЗрд╡рд╛ рдХреЛ рднреА рд░реЛрдХрддрд╛ рд╣реИ:

рдкрд╛рд╕рд╡рд░реНрдб рдлреЙрд░реНрдордХрдВрдЯреНрд░реЛрд▓ рдкрд░ password.hasError('required') Validators.required рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░

AbstractControl.hasError() рдХреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬреЛ рдореБрдЭреЗ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░реАрди рдкрд░ AbstractControl.errors рд╕рдВрдкрддреНрддрд┐ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рд╣реБрдИ рдереА

{{password.errors | json}} , рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк: { "required": true }

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЯрдВрдХрдг рд╕рдВрднрд╡рддрдпрд╛ рдЬреНрдЮрд╛рдд рддреНрд░реБрдЯрд┐рдХреЛрдб, рд╕рд╛рде рд╣реА рдХрд╕реНрдЯрдо рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ

image

рдореБрдЭреЗ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЗ рд╕рд╛рде рднреА рдпрд╣реА рдореБрджреНрджрд╛ рдорд┐рд▓ рд░рд╣рд╛ рд╣реИред

image
image
@ Ajaysake1992 рдХреЗ рд╕рдорд╛рди

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣реБрдб рдХреЗ рддрд╣рдд рдпрд╣ # 149 рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╣реА рдореБрджреНрджрд╛ рд╣реИ - рд╕реВрдЪрдХрд╛рдВрдХ ( control?.errors['required'] ) рджреНрд╡рд╛рд░рд╛ рд╕реВрдЪрдХрд╛рдВрдХ-рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд╕реНрддреБ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдбреЙрдЯ-рдиреЛрдЯреЗрд╢рди ( control?.errors.required ) рдХреЗ рд╕рд╛рде рд╕рдВрджрд░реНрднрд┐рдд рдЧрд▓рдд рд╣реИ рдЧрд▓рдд рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ред

рдореБрдЭреЗ рдпрд╣ рдЖрдЬ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдХреЗ рд╕рд╛рде рдорд┐рд▓рд╛ рдЬрд╣рд╛рдБ 'рдЦреЛрдЬ' рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдереА рдФрд░ рдореБрдЭреЗ рд▓рд╛рд▓ рд╕реНрдХреНрд╡рд┐рдЧрд▓реНрд╕ рджреЗ рд░рд╣реА рдереАред
рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдЗрд╕реЗ рдЪрд▓рд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕реНрдХреНрд╡реАрдЧрд▓реА рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдореЗрдВ рдЖрдзреЗ рджрд┐рди рдмрд┐рддрд╛рдиреЗ рдХреЗ рдмрд╛рдж (рдореЗрд░реА рд╣рддрд╛рд╢рд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░) рдХрд╛рдо рдХрд┐рдпрд╛ ...)
рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╕реНрдХреЛрд╕ рдмрдЧ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ?

рдпрд╣рд╛рдБ рд╕рдорд╛рдзрд╛рди рдХреЗ рдЖрд╕рдкрд╛рд╕ рдореЗрд░рд╛ рдХрд╛рдо рд╣реИ рдЕрдЧрд░ рдЖрдк "рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ!" html рдкрд░ред

your.component.ts:

emailFormControl рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ (): рдХреЛрдИ {
рдпрд╣ рд╡рд╛рдкрд╕ рдХрд░реЗрдВ редformGroupName.get ('рдИрдореЗрд▓');
}

your.component.html:

рдХреГрдкрдпрд╛ рдПрдХ рдорд╛рдиреНрдп рдИрдореЗрд▓ рдкрддрд╛ рдкреНрд░рд╡реЗрд╢ рдХрд░реЗрдВред

рдпрд╣ рд╕рдорд╛рдзрд╛рди рдореЗрд░реЗ рд▓рд┐рдП рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдВрдХрд▓рд┐рдд рддреНрд░реБрдЯрд┐ / рд░рдирдЯрд╛рдЗрдо рддреНрд░реБрдЯрд┐ рдХреЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд┐рдпрд╛:
рдЙрд╕ рдкрдВрдХреНрддрд┐ рдореЗрдВ рдЬрд╣рд╛рдВ рдЖрдк рддреНрд░реБрдЯрд┐ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдореИрдВрдиреЗ рдЯреИрдЧ (>) рдХреЗ рдмрдВрдж рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕реНрдкреЗрд╕ рдмрд╛рд░ рдХреЗ рд╕рд╛рде рдПрдХ рд╕реНрдерд╛рди рдмрдирд╛рдпрд╛ рдФрд░ рддреНрд░реБрдЯрд┐ рдЧрд╛рдпрдм рд╣реЛ рдЧрдИред
рдореИрдВрдиреЗ рдмрдирд╛рдИ рдЧрдИ рдЬрдЧрд╣ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдФрд░ рд╕рдм рдХреБрдЫ рд╕рд╛рдорд╛рдиреНрдп рдерд╛, рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдмрд┐рдирд╛ред

рд╕рд╛рде рд╣реА рдареАрдХ рдЙрд╕реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдЕрдиреБрднрд╡ рднреАред FormBuilder рдореЗрдВ рдмрдирд╛рдП рдЧрдП рдлрд╝реЙрд░реНрдордЧреНрд░реБрдк рдирд┐рдпрдВрддреНрд░рдг рдХреЛ рд╡реНрдпреВ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рд▓рд┐рдП VSCode рдХреЗ рдЗрдВрдЯреЗрд▓реАрд╕реЗрдиреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдХрд┐рд╕реА рднреА рд╡рд┐рдЪрд╛рд░ рдЕрдЧрд░ рд╡рд╣рд╛рдБ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рддрдп рд╕рдВрднрд╡ рд╣реИ, !! рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣рд▓

рдЖрдк рдкреНрд░реЙрдкрд░реНрдЯреА рдХреЗ рдирд╛рдо рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЙрдЯ рдСрдкрд░реЗрдЯрд░ рдХреЗ рдмрдЬрд╛рдп рд╕реНрдХреНрд╡рд╛рдпрд░ рдмреНрд░реИрдХреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдЖрдкрдХреА рд╕рдВрдХрд▓рди рддреНрд░реБрдЯрд┐ рдХреЛ рдареАрдХ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг - * ngIf = "price.errors [рдЖрд╡рд╢реНрдпрдХ]"

рд╡рд╛рд╣, рдХреЛрд╖реНрдардХ рд▓рд╛рд▓ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИред рдореИрдВ рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рд╕реНрдерд╛рдирд┐рдХ рд╣реИред
рдореИрдВ Angular: 7.2.15 , typescript: 3.1.6 рдФрд░ VSC 1.35.1 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред
Screen Shot 2019-06-29 at 10 28 28 AM

рдпрд╣ рдЕрднреА рднреА рдПрдВрдЧреБрд▓рд░ 8.1.3 рдХреЗ рд╕рд╛рде рд╣реЛ рд░рд╣рд╛ рд╣реИ, рджреЛрдиреЛрдВ рдХрд╕реНрдЯрдо рдФрд░ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд░реВрдкреЛрдВ рдХреЗ рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛рдУрдВ (рдЬреИрд╕реЗ рдЖрд╡рд╢реНрдпрдХ) рдХреЗ рд╕рд╛рдеред рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдкрдВрдЬреАрдХреГрдд рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рдЕрдВрддрд░реНрдореБрдЦреА рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рд╣реЛрдВрдЧреЗред рд░рдирд┐рдВрдЧ VSC 1.36.1ред

рд╕рдорд╛рдзрд╛рди: рдбреЙрдЯ-рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рдмрдЬрд╛рдп рдмреНрд░реИрдХреЗрдЯ рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдпрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ !! formcontrol.errors.required

рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдпрд╣ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдореВрд▓реНрдп рдХреЗ рдХрд╛рд░рдг intellisense рдЗрд╕реЗ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ? рдЪреВрдВрдХрд┐ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕рд╣реА / рдЧрд▓рдд рдЭрдВрдбреЗ рдХрд╛ рд╕реЗрдЯ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдХреНрдд рдЭрдВрдбреЛрдВ рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдЬреЛ рдХрд┐ IMO рдПрдХ рдЕрд╕рд╛рдорд╛рдиреНрдп рдкреИрдЯрд░реНрди рд╣реИ), рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рд╕рд╛рде рдореБрджреНрджреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЧрд╣рдирддрд╛ рдХреА рдХрд▓реНрдкрдирд╛ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред

@ivanwonder рдиреЗ рдкрд╣рд▓реЗ рд╣реА рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рд▓рд┐рдП PR рдмрдирд╛ рд▓рд┐рдпрд╛ рд╣реИ ред рддреЛ рдЪрд▓рд┐рдП рдЗрдВрддрдЬрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ рдЬрдм рддрдХ рдХрд┐ рд╡реЗ рдЗрд╕реЗ рдорд░реНрдЬ рди рдХрд░ рджреЗрдВред

рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб:

рдХреЗ рдмрдЬрд╛рдп:

formGroup.errors?.customValidator

рдкреНрд░рдпреЛрдЧ рдХрд░реЗрдВ:

formGroup.errors && formGroup.errors['customValidator']

рдореБрдЭреЗ рдЦреБрд╢реА рд╣реИ рдХрд┐ рд╡рд╣рд╛рдБ рдПрдХ рд╕рдорд╛рдзрд╛рди рд╣реИ ... рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдЗрд╕ рдореБрджреНрджреЗ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╕рдордп рдХреЛрдИ рдкреНрд░рдЧрддрд┐ рд╣реБрдИ рд╣реИ?
рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рд╣рдо рдореЗрдВ рд╕реЗ рдХрдИ рд▓реЛрдЧ рд╕рд░рд▓ рдбреЙрдЯ рдиреЛрдЯреЗрд╢рди рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВред

рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдЕрднреА рднреА v0.802.3 рдкрд░ рдореМрдЬреВрдж рд╣реИ

рдирд┐рд╖реНрдХреНрд░рд┐рдпрддрд╛ рдХреЗ рдХрд╛рд░рдг рдпрд╣ рдореБрджреНрджрд╛ рд╕реНрд╡рддрдГ рдмрдВрдж рд╣реЛ рдЧрдпрд╛ рд╣реИред
рдпрджрд┐ рдЖрдк рдПрдХ рд╕рдорд╛рди рдпрд╛ рд╕рдВрдмрдВрдзрд┐рдд рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдПрдХ рдирдпрд╛ рдореБрджреНрджрд╛ рджрд░реНрдЬ рдХрд░реЗрдВред

рд╣рдорд╛рд░реА рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╡рд╛рд░реНрддрд╛рд▓рд╛рдк рд▓реЙрдХрд┐рдВрдЧ рдиреАрддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдкрдврд╝реЗрдВред

_ рдпрд╣ рдХреНрд░рд┐рдпрд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдмреЙрдЯ рджреНрд╡рд╛рд░рд╛ рдХреА рдЬрд╛рддреА рд╣реИ ред_

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

frederikschubert picture frederikschubert  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

crisz picture crisz  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

mafredri picture mafredri  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

linocatucci picture linocatucci  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

pfeigl picture pfeigl  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ