Vscode-ng-language-service: 인덱싱 된 μœ ν˜• 지원

에 λ§Œλ“  2017λ…„ 07μ›” 07일  Β·  32μ½”λ©˜νŠΈ  Β·  좜처: angular/vscode-ng-language-service

λ°˜μ‘ 양식을 μ‚¬μš©ν•  λ•Œ HTML ν…œν”Œλ¦Ώμ—μ„œ 제λͺ©μ— 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€.


μœ νš¨ν•œ 이름을 μž…λ ₯ν•˜μ‹­μ‹œμ˜€.


"formRegister.controls.company.invalid && formRegister.controls.company.touched"λͺ¨λ‘ 였λ₯˜λ‘œ 밑쀄이 ν‘œμ‹œλ˜μ§€λ§Œ 앱은 μ •μƒμ μœΌλ‘œ μž‘λ™ν•©λ‹ˆλ‹€.

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

λ°˜μ‘ ν˜• μ–‘μ‹μ—μ„œλ„μ΄ λ¬Έμ œκ°€ λ°œμƒν•©λ‹ˆλ‹€.

μž„μ‹œ ν•΄κ²° 방법은 λŒ€κ΄„ν˜Έ 속성 μ ‘κ·Ό 자 식을 μ‚¬μš©ν•˜μ—¬ 속성에 μ•‘μ„ΈμŠ€ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

formRegister.controls['company'].invalid

λͺ¨λ“  32 λŒ“κΈ€

@ virgil-av이 문제λ₯Ό μž¬ν˜„ν•˜λŠ” 리포지토리λ₯Ό λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆκΉŒ?

μœ λ‹ˆμ˜¨ μœ ν˜•κ³Ό λ™μΌν•œ λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€. 처럼

곡개 μ‹œκ°„ : TimeSpan | 끈;

였λ₯˜:
μ‹λ³„μž 'hhMM'이 μ •μ˜λ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€. ''에 ν•΄λ‹Ή ꡬ성원이 μ—†μŠ΅λ‹ˆλ‹€.

hhMM은 TimeSpanμ—μ„œ μœ νš¨ν•œ λ©€λ²„μ΄μ§€λ§Œ Hourκ°€ any처럼 μ·¨κΈ‰λ˜λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€. (

@wupaz λ¬Έμžμ—΄μ΄ λ©€λ²„λ‘œ hhMM κ°€ μ•„λ‹ˆκ³  곡용체 μœ ν˜•μ—λŠ” ꡬ성 μœ ν˜•μ΄ κ³΅ν†΅μœΌλ‘œ κ°–λŠ” 멀버 만 μžˆμœΌλ―€λ‘œ μ˜ˆμ œκ°€ μ˜ˆμƒλ©λ‹ˆλ‹€.

TypeScriptκ°€ μœ μ‚¬ν•œ 였λ₯˜λ₯Ό 보고 함

λ°˜μ‘ ν˜• μ–‘μ‹μ—μ„œλ„μ΄ λ¬Έμ œκ°€ λ°œμƒν•©λ‹ˆλ‹€.

μž„μ‹œ ν•΄κ²° 방법은 λŒ€κ΄„ν˜Έ 속성 μ ‘κ·Ό 자 식을 μ‚¬μš©ν•˜μ—¬ 속성에 μ•‘μ„ΈμŠ€ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

formRegister.controls['company'].invalid

λ˜ν•œ μ‹€μ œλ‘œ 이것을 μ–»κ³  μžˆμŠ΅λ‹ˆλ‹€. λ‚˜λŠ” 이것이 TSμ—μ„œλ„ λ¬Έμ œκ°€λ˜μ—ˆλ‹€κ³  μƒκ°ν•˜μ§€λ§Œ μ§€κΈˆμ€ λ‚˜λ₯Ό μœ„ν•΄ μΌν•˜λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€. TS 2.4.0 및 Angular 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 νŒ¨ν‚€μ§€μ™€ μ „ν˜€ 관련이 μ—†λ‹€λŠ” 것을 ν…ŒμŠ€νŠΈν•˜κ³  λ°œκ²¬ν–ˆκΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€. 이 λ¬Έμ œκ°€ λ°œμƒν•˜κΈ° μ‹œμž‘ν•œ λ‹€μŒ λ‹€λ₯Έ μ‚¬μš©μžλ‘œ λ‘œκ·ΈμΈν•˜μ—¬ λ™μΌν•œ λ””λ ‰ν† λ¦¬μ—μ„œ Visual Studio μ½”λ“œλ₯Ό μ‹œμž‘ν•˜μ—¬ ν…ŒμŠ€νŠΈ ν•œ λ‹€μŒ ν•΄λ‹Ή νŽΈμ§‘κΈ°μ—μ„œ 였λ₯˜κ°€ λ°œμƒν•˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€.

error_screenshot

이것은 λ˜ν•œ 였λ₯˜κ°€ νŽΈμ§‘κΈ°μ—λ§Œ ν‘œμ‹œλ˜κ³  μ»΄νŒŒμΌλŸ¬κ°€ λΉŒλ“œ ν•  λ•Œ λΆˆν‰ν•˜μ§€ μ•ŠλŠ”λ‹€λŠ” 것과 μΌμΉ˜ν•©λ‹ˆλ‹€.

λ”°λΌμ„œ λΆ„λͺ…νžˆ μ‚¬μš©μž 별 μ°¨μ΄μž…λ‹ˆλ‹€. 그런 λ‹€μŒ ꡬ성 디렉토리 제거λ₯Ό ν…ŒμŠ€νŠΈν–ˆλŠ”λ° λ¬Έμ œκ°€ ν•΄κ²°λ˜μ—ˆμŠ΅λ‹ˆλ‹€. 이전 디렉토리λ₯Ό λ‹€μ‹œ μ΄λ™ν•˜λ©΄ λ¬Έμ œκ°€ λ‹€μ‹œ λ‚˜νƒ€λ‚©λ‹ˆλ‹€.

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

κ·Έλž˜μ„œ 이것을 νŠΈλ¦¬κ±°ν•˜λŠ” ꡬ성 디렉토리에 μ•½κ°„μ˜ 균열이 μƒκ²ΌμŠ΅λ‹ˆλ‹€ (일뢀 μΊμ‹œλŠ” λ‚΄ μΆ”μΈ‘μž…λ‹ˆλ‹€). νŽΈμ§‘κΈ°λ₯Ό μ‹œμž‘ν•œ 직후 valid / name.valid μœ„λ‘œ 마우슀λ₯Ό κ°€μ Έ κ°€λ©΄ λͺ‡ 초 λ™μ•ˆ "Loading ..."μ΄λΌλŠ” 툴팁이 사라지고 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€. 두 번째 μ΄ν›„μ—λŠ” 마우슀λ₯Ό 올리면 였λ₯˜κ°€ μ¦‰μ‹œ ν‘œμ‹œλ©λ‹ˆλ‹€.

λ‚˜λŠ” μ‚¬μš©μž 차이λ₯Ό μΆ”μ ν–ˆκ³  그것은 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-template을 μ„€μΉ˜ν•˜λ©΄ name.valid 및 4 개의 λ‹€λ₯Έ μ‹λ³„μžμ— 빨간색 밑쀄이 ν‘œμ‹œλ©λ‹ˆλ‹€ (및 [Angular] Identifier 'valid' is not defined. 'NgModel' does not contain such a member 도ꡬ μ„€λͺ… 였λ₯˜).
    b) Angular.ng-template이 μ„€μΉ˜λ˜μ§€ μ•Šμ•˜κ±°λ‚˜ λΉ„ν™œμ„±ν™”λ˜μ–΄ 있으면 였λ₯˜κ°€ λ°œμƒν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

νŒ¨μΉ˜λŠ” v7.0.0 μƒλŒ€μ μ΄μ§€λ§Œ, src / app / app.module을 ν¬ν•¨ν•˜λŠ” 첫 번째 컀밋 인 2016-08-21의 컀밋 bd5ad5f0 (Feature / ng2 rc5 (# 875))에 λŒ€ν•΄μ„œλ„ ν…ŒμŠ€νŠΈν–ˆμŠ΅λ‹ˆλ‹€. .ts 및 였λ₯˜λ„ λ°œμƒ ν–ˆμœΌλ―€λ‘œ ν•΄λ‹Ή μ €μž₯μ†Œμ˜ λͺ¨λ“  λ²„μ „μ—μ„œ 이것이 문제라고 κ°€μ •ν•©λ‹ˆλ‹€.

angular-electron-dream-starterλŠ” https://github.com/AngularClass/angular-starter 의 ν¬ν¬μ΄λ―€λ‘œ ν•΄λ‹Ή μ €μž₯μ†Œμ—μ„œλ„ 패치λ₯Ό ν…ŒμŠ€νŠΈν–ˆλŠ”λ° λ¬Έμ œκ°€ λ°œμƒν•˜μ§€ μ•Šκ³  λŒ€μ‹  도ꡬ μ„€λͺ…에 μœ νš¨ν•œ 정보가 ν¬ν•¨λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. :

no error

μ›λž˜ vscode 버전 1.17.2 (컀밋 b813d129)μ—μ„œ ν…ŒμŠ€νŠΈλ˜μ—ˆμŠ΅λ‹ˆλ‹€. 버전 1.8.0 (commit dcee22027)으둜 μ—…λ°μ΄νŠΈ ν•œ ν›„ κ²°κ³ΌλŠ” λ™μΌν•©λ‹ˆλ‹€.


Github의 μ™„μ „νžˆ 어리석은 첨뢀 파일 처리둜 인해 νŒ¨μΉ˜λŠ” μ—¬κΈ°μ—μ„œ base64둜 μΈμ½”λ”©λ©λ‹ˆλ‹€.

RnJvbSAyYzgxMTJmYzJhM2I2M2FkZjVmZjA0MDQ3NTcyNjAyMjc2ZWMwYmZiIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiA9P1VURi04P3E / SD1DMz1BNWtvbj0yMEw9QzM9Qjh2ZGFsPz0g
PGtvZGVAZGVua3VsZS5ubz4KRGF0ZTogRnJpLCAxNyBOb3YgMjAxNyAyMDozMDoyMCArMDEwMApT
dWJqZWN0OiBbUEFUQ0hdIEltcG9ydCBvZiBleGFtcGxlIGZyb20gaHR0cHM6Ly9hbmd1bGFyLmlv
L2d1aWRlL2Zvcm1zCgotLS0KIHNyYy9hcHAvYXBwLmNvbXBvbmVudC5odG1sICAgICAgIHwgNDAg
KysrKysrKysrKysrKysrKysrKysrKysrKysrCiBzcmMvYXBwL2FwcC5tb2R1bGUudHMgICAgICAg
ICAgICB8ICA1ICsrKy0KIHNyYy9hcHAvaGVyby1mb3JtLmNvbXBvbmVudC5odG1sIHwgNTggKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogc3JjL2FwcC9oZXJvLWZvcm0u
Y29tcG9uZW50LnRzICAgfCAyMSArKysrKysrKysrKysrKysKIHNyYy9hcHAvaGVyby50cyAgICAg
ICAgICAgICAgIHwgIDkgKysrKysrKwogNSBmaWxlcyBjaGFuZ2VkLCAxMzIgaW5zZXJ0aW9u
cygrKSwgMSBkZWxldGlvbigtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9hcHAvYXBwLmNvbXBv
bmVudC5odG1sCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2FwcC9oZXJvLWZvcm0uY29tcG9uZW50
Lmh0bWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYXBwL2hlcm8tZm9ybS5jb21wb25lbnQudHMK
IGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYXBwL2hlcm8udHMKCmRpZmYgLS1naXQgYS9zcmMvYXBw
L2FwcC5jb21wb25lbnQuaHRtbCBiL3NyYy9hcHAvYXBwLmNvbXBvbmVudC5odG1sCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4YWE1N2EKLS0tIC9kZXYvbnVsbAorKysgYi9z
cmMvYXBwL2FwcC5jb21wb25lbnQuaHRtbApAQCAtMCwwICsxLDQwIEBACis8bmF2PgorCTxhIFty
b3V0ZXJMaW5rXT0iIFsnLi8nXSAiCisJCXJvdXRlckxpbmtBY3RpdmU9ImFjdGl2ZSIgW3JvdXRl
ckxpbmtBY3RpdmVPcHRpb25zXT0gIntleGFjdDogdHJ1ZX0iPgorCQlJbmRleAorCTwvYT4KKwk8
YSBbcm91dGVyTGlua109IiBbJy4vaG9tZSddICIKKwkJcm91dGVyTGlua0FjdGl2ZT0iYWN0aXZl
IiBbcm91dGVyTGlua0FjdGl2ZU9wdGlvbnNdPSAie2V4YWN0OiB0cnVlfSI + CisJCUhvbWUKKwk8
L2E + CisJPGEgW3JvdXRlckxpbmtdPSIgWycuL2RldGFpbCddICIKKwkJcm91dGVyTGlua0FjdGl2
ZT0iYWN0aXZlIiBbcm91dGVyTGlua0FjdGl2ZU9wdGlvbnNdPSAie2V4YWN0OiB0cnVlfSI + CisJ
CURldGFpbAorCTwvYT4KKwk8YSBbcm91dGVyTGlua109IiBbJy4vYmFycmVsJ10gIgorCQlyb3V0
ZXJMaW5rQWN0aXZlPSJhY3RpdmUiIFtyb3V0ZXJMaW5rQWN0aXZlT3B0aW9uc109ICJ7ZXhhY3Q6
IHRydWV9Ij4KKwkJQmFycmVsCisJPC9hPgorCTxhIFtyb3V0ZXJMaW5rXT0iIFsnLi9hYm91dCdd
ICIKKwkJcm91dGVyTGlua0FjdGl2ZT0iYWN0aXZlIiBbcm91dGVyTGlua0FjdGl2ZU9wdGlvbnNd
PSAie2V4YWN0OiB0cnVlfSI + CisJCUFib3V0CisJPC9hPgorPC9uYXY + CisKKzxtYWluPgorCTxh
cHAtaGVyby1mb3JtPjwvYXBwLWhlcm8tZm9ybT4KKwk8cm91dGVyLW91dGxldD48L3JvdXRlci1v
dXRsZXQ + Cis8L21haW4 + CisKKzxwcmUgY2xhc3M9ImFwcC1zdGF0ZSI + dGhpcy5zdGF0ZSQgPSB7
eyBzdGF0ZSQgfCBhc3luYyB8IGpzb24gfX08L3ByZT4KKworPGZvb3Rlcj4KKwk8c3Bhbj4KKwkJ
QW5ndWxhciBFbGVjdHJvbiBEcmVhbSBTdGFydGVyIGJ5IDxhIChjbGljayk9Im9wZW5VUkwodXJs
KSIgaHJlZj0iIyI + QENvbGluU2tvdzwvYT4KKwk8L3NwYW4 + CisJPGRpdj4KKwkJPGEgW2hyZWZd
PSJ1cmwiPgorCQkJPGltZyBbc3JjXT0iYW5ndWxhcmNsYXNzTG9nbyIgd2lkdGg9IjI1JSI + CisJ
CTwvYT4KKwk8L2Rpdj4KKzwvZm9vdGVyPgpkaWZmIC0tZ2l0IGEvc3JjL2FwcC9hcHAubW9kdWxl
LnRzIGIvc3JjL2FwcC9hcHAubW9kdWxlLnRzCmluZGV4IGZlYzI0NTcuLjFjNjEyZWIgMTAwNjQ0
Ci0tLSBhL3NyYy9hcHAvYXBwLm1vZHVsZS50cworKysgYi9zcmMvYXBwL2FwcC5tb2R1bGUudHMK
QEAgLTc3LDYgKzc3LDggQEAgaWYgKEVOViA9PT0gJ2RldmVsb3BtZW50JykgewogICBDT05ESVRJ
T05BTF9JTVBPUlRTLnB1c2goU3RvcmVNb2R1bGUuZm9yUm9vdChyZWR1Y2VycywgeyBtZXRhUmVk
dWNlcnMgfSkpOwogfQogCitpbXBvcnQgeyBIZXJvRm9ybUNvbXBvbmVudCB9IGZyb20gJy4vaGVy
by1mb3JtLmNvbXBvbmVudCc7CisKIC8qKgogICogYEFwcE1vZHVsZWAgaXMgdGhlIG1haW4gZW50
cnkgcG9pbnQgaW50byBBbmd1bGFyMidzIGJvb3RzdHJhcGluZyBwcm9jZXNzCiAgKi8KQEAgLTg3
LDcgKzg5LDggQEAgaWYgKEVOViA9PT0gJ2RldmVsb3BtZW50JykgewogICAgIEFib3V0Q29tcG9u
ZW50LAogICAgIEhvbWVDb21wb25lbnQsCiAgICAgTm9Db250ZW50Q29tcG9uZW50LAotICAgIFhM
YXJnZURpcmVjdGl2ZQorICAgIFhMYXJnZURpcmVjdGl2ZSwKKyAgICBIZXJvRm9ybUNvbXBvbmVu
dCwKICAgXSwKICAgaW1wb3J0czogWyAvLyBpbXBvcnQgQW5ndWxhcidzIG1vZHVsZXMKICAgICBC
cm93c2VyTW9kdWxlLApkaWZmIC0tZ2l0IGEvc3JjL2FwcC9oZXJvLWZvcm0uY29tcG9uZW50Lmh0
bWwgYi9zcmMvYXBwL2hlcm8tZm9ybS5jb21wb25lbnQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi4wZmM2YjgxCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2FwcC9oZXJv
LWZvcm0uY29tcG9uZW50Lmh0bWwKQEAgLTAsMCArMSw1OCBAQAorICAgIDxkaXYgY2xhc3M9ImNv
bnRhaW5lciI + CisgICAgICA8ZGl2IFtoaWRkZW5dPSJzdWJtaXR0ZWQiPgorICAgICAgICA8aDE +
SGVybyBGb3JtPC9oMT4KKyAgICAgICAgPGZvcm0gKG5nU3VibWl0KT0ib25TdWJtaXQoKSIgI2hl
cm9Gb3JtPSJuZ0Zvcm0iPgorICAgICAgICAgIDxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAiPgorICAg
ICAgICAgICAgPGxhYmVsIGZvcj0ibmFtZSI + TmFtZTwvbGFiZWw + CisgICAgICAgICAgICA8aW5w
dXQgdHlwZT0idGV4dCIgY2xhc3M9ImZvcm0tY29udHJvbCIgaWQ9Im5hbWUiCisgICAgICAgICAg
ICAgICAgICAgcmVxdWlyZWQKKyAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT0ibW9kZWwu
bmFtZSIgbmFtZT0ibmFtZSIKKyAgICAgICAgICAgICAgICAgICAjbmFtZT0ibmdNb2RlbCI + Cisg
ICAgICAgICAgICA8ZGl2IFtoaWRkZW5dPSJuYW1lLnZhbGlkIHx8IG5hbWUucHJpc3RpbmUiCisg
ICAgICAgICAgICAgIGNsYXNzPSJhbGVydCBhbGVydC1kYW5nZXIiPgorICAgICAgICAgICAg
ICBOYW1lIGlzIHJlcXVpcmVkCisgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8L2Rpdj4K
KyAgICAgCisgICAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1ncm91cCI + CisgICAgICAgICAgICAgICA8
bGFiZWwgZm9yPSJhbHRlckVnbyI + QWx0ZXIgRWdvPC9sYWJlbD4KKyAgICAgICAgICAgIDxpbnB1
dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iZm9ybS1jb250cm9sIiBpZD0iYWx0ZXJFZ28iCisgICAgICAg
ICAgICAgICAgICAgWyhuZ01vZGVsKV09Im1vZGVsLmFsdGVyRWdvIiBuYW1lPSJhbHRlckVnbyI +
CisgICAgICAgICAgPC9kaXY + CisgICAgIAorICAgICAgICAgIDxkaXYgY2xhc3M9ImZvcm0tZ3Jv
dXAiPgorICAgICAgICAgICAgPGxhYmVsIGZvcj0icG93ZXIiPkhlcm8gUG93ZXI8L2xhYmVsPgor
ICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz0iZm9ybS1jb250cm9sIiBpZD0icG93ZXIiCisgICAg
ICAgICAgICAgICAgIHJlcXVpcmVkCisgICAgICAgICAgICAgICAgIFsobmdNb2RlbCld
PSJtb2RlbC5wb3dlciIgbmFtZT0icG93ZXIiCisgICAgICAgICAgICAgICNwb3dlcj0i
bmdNb2RlbCI + CisgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPSJsZXQgcG93IG9mIHBvd2Vy
cyIgW3ZhbHVlXT0icG93Ij57e3Bvd319PC9vcHRpb24 + CisgICAgICAgICA8L3NlbGVjdD4K
KyAgICAgICAgICAgIDxkaXYgW2hpZGRlbl09InBvd2VyLnZhbGlkIHx8IHBvd2VyLnByaXN0aW5l
IiBjbGFzcz0iYWxlcnQgYWxlcnQtZGFuZ2VyIj4KKyAgICAgICAgICAgICAgUG93ZXIgaXMgcmVx
dWlyZWQKKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIDwvZGl2PgorICAgICAKKyAgICAg
ICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgY2xhc3M9ImJ0biBidG4tc3VjY2VzcyIgW2Rpc2Fi
bGVkXT0iIWhlcm9Gb3JtLmZvcm0udmFsaWQiPlN1Ym1pdDwvYnV0dG9uPgorICAgICAgICAgIDxi
dXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IiAoY2xpY2spPSJuZXdI
ZXJvKCk7IGhlcm9Gb3JtLnJlc2V0KCkiPk5ldyBIZXJvPC9idXR0b24 + CisgICAgICAgIDwvZm9y
bT4KKyAgICAgIDwvZGl2PgorICAgICAKKyAgICAgIDxkaXYgW2hpZGRlbl09IiFzdWJtaXR0ZWQi
PgorICAgICAgICA8aDI + WW91IHN1Ym1pdHRlZCB0aGUgZm9sbG93aW5nOjwvaDI + CisgICAgICAg
IDxkaXYgY2xhc3M9InJvdyI + CisgICAgICAgICAgPGRpdiBjbGFzcz0iY29sLXhzLTMiPk5hbWU8
L2Rpdj4KKyAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2wteHMtOSAgcHVsbC1sZWZ0Ij57eyBtb2Rl
bC5uYW1lIH19PC9kaXY + CisgICAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJyb3ci
PgorICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbC14cy0zIj5BbHRlciBFZ288L2Rpdj4KKyAgICAg
ICAgICA8ZGl2IGNsYXNzPSJjb2wteHMtOSBwdWxsLWxlZnQiPnt7IG1vZGVsLmFsdGVyRWdvIH19
PC9kaXY + CisgICAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJyb3ciPgorICAgICAg
ICAgIDxkaXYgY2xhc3M9ImNvbC14cy0zIj5Qb3dlcjwvZGl2PgorICAgICAgICAgIDxkaXYgY2xh
c3M9ImNvbC14cy05IHB1bGwtbGVmdCI + e3sgbW9kZWwucG93ZXIgfX08L2Rpdj4KKyAgICAgICAg
PC9kaXY + CisgICAgICAgIDxicj4KKyAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1wcmlt
YXJ5IiAoY2xpY2spPSJzdWJtaXR0ZWQ9ZmFsc2UiPkVkaXQ8L2J1dHRvbj4KKyAgICAgIDwvZGl2
PgorICAgIDwvZGl2PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Ny
Yy9hcHAvaGVyby1mb3JtLmNvbXBvbmVudC50cyBiL3NyYy9hcHAvaGVyby1mb3JtLmNvbXBvbmVu
dC50cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjY1ZmI5Ci0tLSAvZGV2
L251bGwKKysrIGIvc3JjL2FwcC9oZXJvLWZvcm0uY29tcG9uZW50LnRzCkBAIC0wLDAgKzEsMjEg
QEAKK2ltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnOworCitpbXBvcnQg
eyBIZXJvIH0gZnJvbSAnLi9oZXJvJzsKKworQENvbXBvbmVudCh7CisJc2VsZWN0b3I6ICdhcHAt
aGVyby1mb3JtJywKKwl0ZW1wbGF0ZVVybDogJy4vaGVyby1mb3JtLmNvbXBvbmVudC5odG1sJwor
fSkKK2V4cG9ydCBjbGFzcyBIZXJvRm9ybUNvbXBvbmVudCB7CisKKwlwdWJsaWMgcG93ZXJzID0g
WydSZWFsbHkgU21hcnQnLCAnU3VwZXIgRmxleGlibGUnLCAnU3VwZXIgSG90JywgJ1dlYXRoZXIg
Q2hhbmdlciddOworCXB1YmxpYyBtb2RlbCA9IG5ldyBIZXJvKDE4LCAnRHIgSVEnLCB0aGlzLnBv
d2Vyc1swXSwgJ0NodWNrIE92ZXJzdHJlZXQnKTsKKworCXB1YmxpYyBzdWJtaXR0ZWQgPSBmYWxz
ZTsKKworCXB1YmxpYyBvblN1Ym1pdCgpIHsgdGhpcy5zdWJtaXR0ZWQgPSB0cnVlOyB9CisKKwlw
dWJsaWMgbmV3SGVybygpIHsKKwkJdGhpcy5tb2RlbCA9IG5ldyBIZXJvKDQyLCAnJywgJycpOwor
CX0KK30KZGlmZiAtLWdpdCBhL3NyYy9hcHAvaGVyby50cyBiL3NyYy9hcHAvaGVyby50cwpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzQ5YzkyCi0tLSAvZGV2L251bGwKKysr
IGIvc3JjL2FwcC9oZXJvLnRzCkBAIC0wLDAgKzEsOSBAQAorZXhwb3J0IGNsYXNzIEhlcm8gewor
CWNvbnN0cnVjdG9yKAorCQlwdWJsaWMgaWQ6IG51bWJlciwKKwkJcHVibGljIG5hbWU6IHN0cmlu
ZywKKwkJcHVibGljIHBvd2VyOiBzdHJpbmcsCisJCXB1YmxpYyBhbHRlckVnbz86IHN0cmluZwor
CSkgeworCX0KK30KLS0gCjIuMTMuNgoK

λΉ„μŠ·ν•œ λ¬Έμ œμ— μ§λ©΄ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. ν”ŒλŸ¬κ·ΈμΈμ€ ν΄λž˜μŠ€μ—μ„œ 직접 μ„ μ–Έ 된 λ³€μˆ˜ 만 μΈμ‹ν•˜κ³  formGroup λ˜λŠ” formBuilder에 쀑첩 된 λ³€μˆ˜λŠ” μΈμ‹ν•˜μ§€ μ•ŠλŠ” κ²ƒμœΌλ‘œ λ³΄μž…λ‹ˆλ‹€.
이 ꡬ성 μš”μ†Œ μ½”λ“œλŠ” 두 개의 FromControl ν•„λ“œμ— λŒ€ν•΄ HTMLμ—μ„œ 였λ₯˜ Squiggliesλ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.

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 })
    });
  }
}

λ°˜λ©΄μ— 이것은 λ‚΄κ°€ ν΄λž˜μŠ€μ—μ„œ FormControl을 직접 μ„ μ–Έν–ˆκΈ° λ•Œλ¬Έμ— 였λ₯˜λ₯Ό μ œκ³΅ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ (μ•ˆνƒ€κΉκ²Œλ„ angularλŠ” formgroup μ™ΈλΆ€μ—μ„œ formcontrol 선언을 ν—ˆμš©ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— 해결책이 μ•„λ‹™λ‹ˆλ‹€)-

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 Code Linux v1.20.1, Typescript 2.6.2, Angular.ng-template v0.1.9λ₯Ό μ‚¬μš©ν•˜μ—¬ ν…ŒμŠ€νŠΈν–ˆμŠ΅λ‹ˆλ‹€.
Angular.ng-template v0.1.9에 λ¬Έμ œκ°€ μ—¬μ „νžˆ μ‘΄μž¬ν•˜λŠ”μ§€ 확인해 μ£Όμ‹œκ² μŠ΅λ‹ˆκΉŒ?

@kyliau 였늘 Windows의 VS Code v1.21.1, Typescript 2.3.4 및 Angular.ng-template 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.valid 뢀뢄이 μ•„λ‹ˆλΌ buyForm.controls.amount.dirty μ—λ§Œ 밑쀄이 ν‘œμ‹œλ¨). 이것이 μœ„μ— 주어진 μ†”λ£¨μ…˜ (이쀑 λΆ€μ • μ‚¬μš©)이 μž‘λ™ν•˜λŠ” μ΄μœ μž…λ‹ˆλ‹€.

λ‚˜λŠ” μ˜€λž«λ™μ•ˆ 이것에 λŒ€ν•œ ν•΄κ²° 방법을 μ°Ύκ³  μžˆμ—ˆλ‹€-κ°μ‚¬ν•©λ‹ˆλ‹€

@guhyeon 고맙지

μ•ˆλ…•ν•˜μ„Έμš”.
κΈ€μŽ„ .. 그닀지 λͺ¨λ₯΄κ² μ–΄μš”.
μœ ν˜• 슀크립트 컴파일러 문제라고 μƒκ°ν•©λ‹ˆλ‹€.
μš°μ—°νžˆ 배운 νŽΈλ²•μž…λ‹ˆλ‹€.

λŒ€μ‹ μ΄ ν•΄κ²° 방법을 μ‚¬μš©ν•˜μ—¬ vscode Angular Language Serviceκ°€ λΆˆν‰ν•˜λŠ” 것을 μ€‘μ§€ν–ˆμŠ΅λ‹ˆλ‹€.

μ•”ν˜Έ FormControlμ—μ„œ Validators.required μœ νš¨μ„± 검사기λ₯Ό μ‚¬μš©ν•˜λŠ” password.hasError('required')

AbstractControl.hasError() μ—λŠ” 디버깅을 μœ„ν•΄ AbstractControl.errors 속성을 화면에 ν‘œμ‹œν•˜μ—¬ 얻은 errorCode 값이 ν•„μš”ν•©λ‹ˆλ‹€.

{{password.errors | json}} , κ²°κ³Ό : { "required": true }

μ•Œλ €μ§„ errorCode 및 μ‚¬μš©μž 지정 μœ νš¨μ„± 검사기에 λŒ€ν•΄ μΆ”κ°€ μž…λ ₯이 κ°€λŠ₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

image

typescript μ»΄νŒŒμΌλŸ¬μ—μ„œλ„ λ™μΌν•œ λ¬Έμ œκ°€ λ°œμƒν•©λ‹ˆλ‹€.

image
image
@ ajaysake1992 와 동일

λ‚΄λΆ€μ μœΌλ‘œλŠ” 이것이 # 149와 λ™μΌν•œ 문제라고 μƒκ°ν•©λ‹ˆλ‹€. 인덱슀 ( control?.errors['required'] )둜 인덱슀 μ„œλͺ…μ΄μžˆλŠ” 객체λ₯Ό μ°Έμ‘°ν•˜λŠ” 것은 μž‘λ™ν•˜μ§€λ§Œ 점 ν‘œκΈ°λ²• ( control?.errors.required )으둜 μ°Έμ‘°ν•˜λŠ” 것은 잘λͺ»λ˜μ—ˆμŠ΅λ‹ˆλ‹€. 잘λͺ»λœ κ²ƒμœΌλ‘œ μ‹ κ³ λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

μ˜€λŠ˜μ€ κ°„λ‹¨ν•œ '검색'이 μ •μ˜λ˜μ§€ μ•Šμ•˜κ³  λ‚˜μ—κ²Œ 빨간색 λ¬Όκ²° 선이 ν‘œμ‹œλ˜μ—ˆμŠ΅λ‹ˆλ‹€.
앱이 μ˜λ„ ν•œλŒ€λ‘œ 컴파일되고 μž‘λ™ν–ˆμŠ΅λ‹ˆλ‹€.
λ‚˜μ—κ²Œ vscode λ²„κ·Έμ²˜λŸΌ λ“€λ¦¬λ‚˜μš”?

"!!"κ°€ λ§ˆμŒμ— 듀지 μ•ŠμœΌλ©΄ ν•΄κ²° 방법이 μžˆμŠ΅λ‹ˆλ‹€. HTML에.

your.component.ts :

get emailFormControl () : any {
return this.formGroupName.get ( 'email');
}

your.component.html :

μœ νš¨ν•œ 이메일을 μž…λ ₯ν•˜μ‹­μ‹œμ˜€.

이 μ†”λ£¨μ…˜μ€ 컴파일 였λ₯˜ / λŸ°νƒ€μž„ 였λ₯˜μ—†μ΄ λ‚˜λ₯Ό μœ„ν•΄ μž‘λ™ν•©λ‹ˆλ‹€.

이것은 λ‚˜λ₯Ό μœ„ν•΄ μΌν–ˆμŠ΅λ‹ˆλ‹€.
였λ₯˜λ₯Ό ν‘œμ‹œ ν•œ 쀄에 νƒœκ·Έ (>)λ₯Ό ​​닫기 전에 슀페이슀 λ°”λ₯Ό λ„μ›Œμ„œ 였λ₯˜κ°€ μ‚¬λΌμ‘ŒμŠ΅λ‹ˆλ‹€.
생성 된 곡간을 μ‚­μ œν–ˆκ³  λͺ¨λ“  것이 였λ₯˜μ—†μ΄ μ •μƒμ΄μ—ˆμŠ΅λ‹ˆλ‹€.

λ˜ν•œ λ˜‘κ°™μ€ λ¬Έμ œκ°€ λ°œμƒν•©λ‹ˆλ‹€. FormBuilderμ—μ„œ λ§Œλ“  FormGroup μ»¨νŠΈλ‘€μ€ λ·° ν…œν”Œλ¦Ώμ— λŒ€ν•œ 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

이것은 μ‚¬μš©μž μ •μ˜ 및 λ‚΄μž₯ 양식 μœ νš¨μ„± 검사기 (예 : ν•„μˆ˜)와 ν•¨κ»˜ Angular 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 λ“±κΈ‰