λ°μ μμμ μ¬μ©ν λ HTML ν νλ¦Ώμμ μ λͺ©μ μ€λ₯κ° λ°μν©λλ€.
μ ν¨ν μ΄λ¦μ μ
λ ₯νμμμ€.
"formRegister.controls.company.invalid && formRegister.controls.company.touched"λͺ¨λ μ€λ₯λ‘ λ°μ€μ΄ νμλμ§λ§ μ±μ μ μμ μΌλ‘ μλν©λλ€.
@ 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 μ½λλ₯Ό μμνμ¬ ν μ€νΈ ν λ€μ ν΄λΉ νΈμ§κΈ°μμ μ€λ₯κ° λ°μνμ§ μμμ΅λλ€.
μ΄κ²μ λν μ€λ₯κ° νΈμ§κΈ°μλ§ νμλκ³ μ»΄νμΌλ¬κ° λΉλ ν λ λΆννμ§ μλλ€λ κ²κ³Ό μΌμΉν©λλ€.
λ°λΌμ λΆλͺ ν μ¬μ©μ λ³ μ°¨μ΄μ λλ€. κ·Έλ° λ€μ κ΅¬μ± λλ ν 리 μ κ±°λ₯Ό ν μ€νΈνλλ° λ¬Έμ κ° ν΄κ²°λμμ΅λλ€. μ΄μ λλ ν 리λ₯Ό λ€μ μ΄λνλ©΄ λ¬Έμ κ° λ€μ λνλ©λλ€.
$ 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μ ν λΆμ
λλ€. μ΄μ μ΄ λ¬Έμ λ₯Ό μ¬ννλ μ μ₯μλ μ 곡 ν μ μμ΅λλ€.
name.valid
λ° 4 κ°μ λ€λ₯Έ μλ³μμ λΉ¨κ°μ λ°μ€μ΄ νμλ©λλ€ (λ° [Angular] Identifier 'valid' is not defined. 'NgModel' does not contain such a member
λꡬ μ€λͺ
μ€λ₯).ν¨μΉλ 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 μ ν¬ν¬μ΄λ―λ‘ ν΄λΉ μ μ₯μμμλ ν¨μΉλ₯Ό ν μ€νΈνλλ° λ¬Έμ κ° λ°μνμ§ μκ³ λμ λꡬ μ€λͺ μ μ ν¨ν μ λ³΄κ° ν¬ν¨λμ΄ μμ΅λλ€. :
μλ 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 })
});
}
}
μμ "!!"λ₯Ό μΆκ°νμμμ€.
κΉλ€ λ‘μ§ λ§
λλ μ΄λ κ² μ±κ³΅νλ€.
@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 λ° μ¬μ©μ μ§μ μ ν¨μ± κ²μ¬κΈ°μ λν΄ μΆκ° μ λ ₯μ΄ κ°λ₯ν μ μμ΅λλ€.
typescript μ»΄νμΌλ¬μμλ λμΌν λ¬Έμ κ° λ°μν©λλ€.
@ 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
μμ΅λλ€.
μ΄κ²μ μ¬μ©μ μ μ λ° λ΄μ₯ μμ μ ν¨μ± κ²μ¬κΈ° (μ : νμ)μ ν¨κ» 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μ μ¬μ ν μ‘΄μ¬ν©λλ€.
μ΄ λ¬Έμ λ νλμ΄ μμ΄ μλμΌλ‘ μ κ²Όμ΅λλ€.
μ μ¬νκ±°λ κ΄λ ¨λ λ¬Έμ κ° λ°μνλ©΄ μλ‘μ΄ λ¬Έμ λ₯Ό μ μΆνμμμ€.
μλ λν μ κΈ μ μ± μ λν΄ μμΈν μμ보μμμ€.
_μ΄ μμ μ λ΄μ μν΄ μλμΌλ‘ μνλμμ΅λλ€ ._
κ°μ₯ μ μ©ν λκΈ
λ°μ ν μμμμλμ΄ λ¬Έμ κ° λ°μν©λλ€.
μμ ν΄κ²° λ°©λ²μ λκ΄νΈ μμ± μ κ·Ό μ μμ μ¬μ©νμ¬ μμ±μ μ‘μΈμ€νλ κ²μ λλ€.