При использовании реактивных форм в шаблоне HTML я получаю ошибку в заголовке.
Пожалуйста, введите верное имя.
Оба "formRegister.controls.company.invalid && formRegister.controls.company.touched" подчеркнуты как ошибка, но приложение работает нормально.
@ virgil-av Можете ли вы создать репозиторий, воспроизводящий эту проблему?
У нас такая же проблема с типом объединения. подобно
общественный час: TimeSpan | нить;
Ошибка:
Идентификатор «ччММ» не определен. '
hhMM - действительный член в TimeSpan, но кажется, что Hour рассматривается как любой; (
@wupaz Ожидается, что hhMM
в качестве члена, а тип объединения имеет только те элементы, которые являются общими для составляющих типов.
TypeScript сообщает об аналогичной ошибке
У меня тоже возникла проблема с реактивными формами.
Временный обходной путь - получить доступ к свойству с помощью выражения аксессора свойства propety.
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
сразу после запуска редактора в течение нескольких секунд отображается всплывающая подсказка «Загрузка ...», затем она исчезает и возникает ошибка. Второй раз и позже ошибка отображается сразу при наведении курсора.
Я отследил разницу между пользователями, и это установка расширения vscode Angular.ng-template
версии 0.1.7. И теперь я также могу предоставить репозиторий, в котором воспроизводится эта проблема:
name.valid
и четыре других идентификатора будут подчеркнуты красным цветом (и [Angular] Identifier 'valid' is not defined. 'NgModel' does not contain such a member
ошибки всплывающей подсказки).Патч относится к v7.0.0
, но я также тестировал его против коммита bd5ad5f0 (Feature / ng2 rc5 (# 875)) от 21.08.2016, который является первым коммитом, содержащим src / app / app.module .ts, и ошибка возникла и там, поэтому я предполагаю, что это проблема для всех версий этого репо.
Поскольку angular-electronics-dream-starter является вилкой https://github.com/AngularClass/angular-starter , я также протестировал патч в этом репо, и там проблема не возникает, но вместо этого всплывающая подсказка содержит достоверную информацию :
Первоначально тестировался на vscode версии 1.17.2 (фиксация b813d129). После обновления до версии 1.8.0 (фиксация dcee22027) результат такой же.
Из-за совершенно глупой обработки вложений Github патч закодирован в base64:
RnJvbSAyYzgxMTJmYzJhM2I2M2FkZjVmZjA0MDQ3NTcyNjAyMjc2ZWMwYmZiIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiA9P1VURi04P3E / SD1DMz1BNWtvbj0yMEw9QzM9Qjh2ZGFsPz0g
PGtvZGVAZGVua3VsZS5ubz4KRGF0ZTogRnJpLCAxNyBOb3YgMjAxNyAyMDozMDoyMCArMDEwMApT
dWJqZWN0OiBbUEFUQ0hdIEltcG9ydCBvZiBleGFtcGxlIGZyb20gaHR0cHM6Ly9hbmd1bGFyLmlv
L2d1aWRlL2Zvcm1zCgotLS0KIHNyYy9hcHAvYXBwLmNvbXBvbmVudC5odG1sICAgICAgIHwgNDAg
KysrKysrKysrKysrKysrKysrKysrKysrKysrCiBzcmMvYXBwL2FwcC5tb2R1bGUudHMgICAgICAg
ICAgICB8ICA1ICsrKy0KIHNyYy9hcHAvaGVyby1mb3JtLmNvbXBvbmVudC5odG1sIHwgNTggKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogc3JjL2FwcC9oZXJvLWZvcm0u
Y29tcG9uZW50LnRzICAgfCAyMSArKysrKysrKysrKysrKysKIHNyYy9hcHAvaGVyby50cyAgICAg
ICAgICAgICAgICAgIHwgIDkgKysrKysrKwogNSBmaWxlcyBjaGFuZ2VkLCAxMzIgaW5zZXJ0aW9u
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
ICAgICAgICAgcmVxdWlyZWQKKyAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT0ibW9kZWwu
bmFtZSIgbmFtZT0ibmFtZSIKKyAgICAgICAgICAgICAgICAgICAjbmFtZT0ibmdNb2RlbCI + Cisg
ICAgICAgICAgICA8ZGl2IFtoaWRkZW5dPSJuYW1lLnZhbGlkIHx8IG5hbWUucHJpc3RpbmUiCisg
ICAgICAgICAgICAgICAgIGNsYXNzPSJhbGVydCBhbGVydC1kYW5nZXIiPgorICAgICAgICAgICAg
ICBOYW1lIGlzIHJlcXVpcmVkCisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8L2Rpdj4K
KyAgICAgCisgICAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1ncm91cCI + CisgICAgICAgICAgICA8
bGFiZWwgZm9yPSJhbHRlckVnbyI + QWx0ZXIgRWdvPC9sYWJlbD4KKyAgICAgICAgICAgIDxpbnB1
dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iZm9ybS1jb250cm9sIiBpZD0iYWx0ZXJFZ28iCisgICAgICAg
ICAgICAgICAgICAgWyhuZ01vZGVsKV09Im1vZGVsLmFsdGVyRWdvIiBuYW1lPSJhbHRlckVnbyI +
CisgICAgICAgICAgPC9kaXY + CisgICAgIAorICAgICAgICAgIDxkaXYgY2xhc3M9ImZvcm0tZ3Jv
dXAiPgorICAgICAgICAgICAgPGxhYmVsIGZvcj0icG93ZXIiPkhlcm8gUG93ZXI8L2xhYmVsPgor
ICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz0iZm9ybS1jb250cm9sIiBpZD0icG93ZXIiCisgICAg
ICAgICAgICAgICAgICAgIHJlcXVpcmVkCisgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCld
PSJtb2RlbC5wb3dlciIgbmFtZT0icG93ZXIiCisgICAgICAgICAgICAgICAgICAgICNwb3dlcj0i
bmdNb2RlbCI + CisgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPSJsZXQgcG93IG9mIHBvd2Vy
cyIgW3ZhbHVlXT0icG93Ij57e3Bvd319PC9vcHRpb24 + CisgICAgICAgICAgICA8L3NlbGVjdD4K
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.
Этот код компонента выдает ошибку Squigglies в HTML для двух полей FromControl:
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 не позволяет объявление 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 Сегодня я столкнулся с этой проблемой с VS Code v1.21.1 для Windows, 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.dirty
, а не часть !buyForm.controls.amount.valid
). Поэтому приведенное выше решение (с двойным отрицанием) работает.
Я много лет искал обходной путь - спасибо
@guhyeon, спасибо, но не могли бы вы объяснить, что это значит?
@rubenheymans
Ну ... я не так много знаю.
Я думаю, что это проблема компилятора типового скрипта.
Это средство, которое я узнал случайно.
Вместо этого я попытался использовать этот обходной путь, который также мешает службе языка vscode Angular жаловаться:
password.hasError('required')
с использованием валидатора Validators.required
для пароля FormControl
AbstractControl.hasError()
требует значение errorCode, которое я получил, отображая свойство AbstractControl.errors
на экране для отладки
{{password.errors | json}}
, в результате получается: { "required": true }
Для известных кодов ошибок, а также для пользовательских валидаторов, вероятно, могут быть доступны дополнительные типы ввода.
У меня такая же проблема с компилятором машинописного текста.
То же, что @ ajaysake1992
Я думаю, что под капотом это та же проблема, что и # 149 - ссылка на объект с индексной подписью по индексу ( control?.errors['required']
) работает, но ссылка с точечной нотацией ( control?.errors.required
) ошибочна отмечен как неправильный.
Я получил это сегодня с помощью простого где слово "поиск" было неопределенным и давало мне красные волнистые линии.
Приложение скомпилировано и работало, как задумано (к моему разочарованию после того, как я потратил полдня на то, чтобы решить проблему перед запуском ...)
Для меня это похоже на ошибку vscode?
Вот мое решение, если вам не нравится "!!" на html.
your.component.ts:
получить emailFormControl (): any {
вернуть this.formGroupName.get ('электронная почта');
}
your.component.html:
Это решение работает для меня без каких-либо ошибок компиляции / ошибок времени выполнения.
Это сработало для меня:
В строке, где вы отмечаете ошибку, я поставил пробел перед закрытием тега (>), и ошибка исчезла.
Я удалил созданное пространство и все было нормально, без ошибок.
Тоже испытываю точно такую же проблему. Элементы управления FormGroup, созданные в FormBuilder, не известны intellisense VSCode для шаблона представления. Любая идея, есть ли для этого реальное исправление, а не !! обходной путь
Для доступа к имени свойства можно использовать квадратную скобку вместо оператора точки. Это может исправить вашу ошибку компиляции.
Пример - * ngIf = "price.errors [обязательно]"
Ух ты, скобки решают красное. Я могу подтвердить, что это эпизодически.
Я использую Angular: 7.2.15
, typescript: 3.1.6
и VSC 1.35.1
.
Это все еще происходит с Angular 8.1.3, с настраиваемыми и встроенными валидаторами форм (например, обязательными). Было бы здорово, если бы зарегистрированные валидаторы были понятны для intellisense. Запуск VSC 1.36.1.
Обходной путь: используйте аннотацию скобками вместо аннотации точки или используйте !! formcontrol.errors.required
Обходной путь заставляет меня задуматься, может ли intellisense отметить это из-за неопределенного значения? Поскольку объект ошибок не является набором истинных / ложных флагов, а определяется существованием указанных флагов (что является необычным шаблоном IMO), я могу представить, что у intellisense есть проблемы с этим.
@ivanwonder уже создали пиар для этого номера. Так что подождем, пока они его объединят.
Обходной путь:
Вместо:
formGroup.errors?.customValidator
использовать:
formGroup.errors && formGroup.errors['customValidator']
Я рад, что есть обходной путь ... но был ли достигнут прогресс в изучении проблемы?
Я уверен, что многие из нас предпочитают простую запись через точку.
Эта проблема все еще существует в v0.802.3
Эта проблема была автоматически заблокирована из-за бездействия.
Сообщите о новой проблеме, если вы столкнулись с аналогичной или связанной проблемой.
Узнайте больше о нашей политике автоматической блокировки разговоров .
_Это действие было выполнено автоматически ботом. _
Самый полезный комментарий
У меня тоже возникла проблема с реактивными формами.
Временный обходной путь - получить доступ к свойству с помощью выражения аксессора свойства propety.