在Windows 10上的0.1.4中
errors?.required
被突出显示为错误
也在OS X 10.11.6(El Capitan)上发生。
作业系统:OS X 10.11.6
扩展版本:0.1.4
VS Code版本:1.15.1
我在Windows 10 x64上也遇到了这个问题
扩展版本0.1.7
VS Code版本1.15.1
请尽快修复
这里同样的问题。
错误是:未定义“标识符”错误。 “ NgModel”不包含此类成员。
作业系统:macOS 10.13
扩展名:0.1.7
VS代码:1.16.1
角度:4.4.3
打字稿:2.5.2
同样的问题! 有什么办法吗?
我应该将其导入app.module或存在表单的组件中吗?
@VladBozhinovski提到的@ angular / forms导入无法解决。
相关种类: https :
是的,我也没有工作...
我有同样的问题..任何解决方案?
同一期,有人找到解决方法了吗?
同样的问题在这里。 有什么想法吗?
我也有这个问题的任何解决方案
同样在这里。
似乎我并不孤单:)
这么多人遇到了这个问题。 你们可以阻止它,例如“ email?.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)
确保您导入
从'@ angular / forms'导入{FormsModule,Validators};
此线程中的任何解决方案都不能解决问题。 我尽可能简化了一个示例,以确保没有其他混乱的情况:
FormModule和验证器已从@ angular / forms导入。 我还通过@ Duanthse03268测试了此解决方案,它不仅不能解决红线问题,而且如果在不使用myField的情况下使用myField的状态发生更改(TypeError:无法读取属性'required',则为null)也会在控制台中导致错误。 '?' 在“错误”之后。
我的实现在浏览器中没有错误,但在编辑器(VSCode)中保留了(据说不正确)红线。 有问题的文件的要点(您可以通过“ ng new ...”复制所有其他内容):
app.module.ts
app.component.ts
app.component.html
版本:
扩展名:0.1.7
VSCode:1.19.1
角CLI:1.6.3
节点:9.2.1
作业系统:macOS 10.12.6
角度:5.1.3
铬:63.0.3239.84
您为什么不尝试使用'myfield?.error.required'。
我确实做了尝试,就像我在先前的评论中所写的那样:“不仅无法解决红线问题,而且当myField的状态更改时,它还会在控制台中导致错误(TypeError:无法读取null的'required'属性)”。
因此,详细来说,“ myField?.errors.required”不起作用,并导致上述错误消息显示在控制台中。 这 '?' 必须在“错误”之后编写代码,以使此代码在浏览器中运行而不会出现错误消息,但仍不能解决编辑器中红线不正确的原始问题。
这仍然很烦人,因为红线仍然存在,但是功能正常。 我同意joonashak,因为提出的解决方案不起作用,尝试两种格式都不能解决问题。
这为我工作:
希望对您有帮助。
唯一的解决方法:(
IntelliJ为我抛出相同的错误。 但是即使浏览器中的错误也可以实现。 @Ahnset的解决方法为我工作。 想知道这个语法是什么,现在如何工作?
我发现,每当您引用定义为“ any”的属性时,都会出现此错误。 另一个解决方法是使用括号属性注释clientFirstName?.errors ['required'],它也很愚蠢。
最糟糕的是,随着vscode的最新更新,我的文件树变得更像圣诞树了:christmas_tree:
@adickenscheidt感谢您的解决方法。 效果很好,暂时同意。
删除了Angular Language Service ...
@ Duanthse03268您的功能正常运行! 谢谢。
@adickenscheidt
谢谢这个解决方案为我工作
有效。 非常感谢@ Duanthse03268
@ Duanthse03268您的功能正常运行! 但这到底是什么意思?
它不适用于嵌套对象属性<mat-select [(ngModel)]="object?.nestedObject?.property" name="property" #property="ngModel">
在object?.object?.property
上获得过冷的解析错误
我用这个丑陋但可行。
name?.errors && name?.errors['required']
email.errors ['required']为我工作
@ guignol1981解决方案为我工作。
使用这个为我工作:
只有元素名称需要? 标记。 不太丑我有同样的问题,但是没有一个建议的解决方案起作用:
“ form?.get('name')。errors.required”
“表单?.get('name')。错误。['必需']”
“ form?.get('name')。errors..required”
您好尝试这样。
Form.hasError('required');
那对我有用。 谢谢@antonheck
有一些变通办法,每个变通办法都适合于不同情况,是的。 但这不是问题。 当我从一开始就编写正确的代码时,我不必以不同的方式编写代码,包括丑陋的,骇人的sintaxe,而只是为了安抚IDE扩展。
我有与此类似的代码完全相同的问题和消息:
class MyComponent {
form: FormGroup;
}
在模板中带有这样的行:
<app-errors [control]="form.controls.email">
错误信息 :
未定义标识符“电子邮件”。 '__type'不包含此类成员
问题是由类似类型的字段引起的(它发生在AbstractControl或其他东西中):
{ [key: string]: AbstractControl; };
我在Visual Studio Code(Windows)和Angular Language Services中有此消息,但没有ng lint
。
感谢tmrony,这是经过数天搜索的最佳解决方案...
实际上应该是这样,因为“ AbstractControl”的“ errors”属性没有严格定义的属性,而是“ ValidationErrors ”类型,因此显示了错误高亮显示
因此,直接访问验证规则会导致错误,在我的情况下,使用方括号表示法可以解决此问题。
(顺便说一句,即使我直接访问验证属性,但没有收到编译错误,该应用程序仍然可以正常运行)
另一种方法是使用控件的“ hasError”方法:
<span *ngIf="(firstName.dirty || firstName.touched) && firstName.hasError('required')">First name is required.</span>
@ boban984解决方案成功了...
@adickenscheidt解决方案为我工作! 谢谢
“ price.errors ['required']”->正常工作
“ !! price.errors.required”->起作用
“ price?.errors..required”也应该起作用,因为我的“ fullname?.errors..required”有效
“ price.errors ['required']”->正常工作
这不会触发编译器“未定义标识符”,但这不是一个好的解决方案,因为如果errors对象为null,它将在控制台上引起错误。
@ 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,为我工作! 👍🏼
我讨厌在控制台上查看错误😬
您好尝试这样。
Form.hasError('required');
这是最优雅的解决方案,并且确实适用于所有情况:myForm.hasError('required','myField')。
谢谢@antonheck
您好尝试这样。
Form.hasError('required');
这是最优雅的解决方案,并且确实适用于所有情况:myForm.hasError('required','myField')。
它可以工作,但是@ boban984提供了基于简单性的最佳解决方案:“ myField.hasError('required')”。 :)
我以这种方式解决了这个问题:
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>
这在Angular 7中对我有用
那么两年后还没有解决? 🤣
相关: https :
那么两年后还没有解决? 🤣
相关:#110
这不是错误,而是它应该工作的方式
如果这是预期的功能,可以更新文档吗? (参见此处的一个示例)。
显然,这可以推断可以使用ngModel
的原始属性访问器,而该线程已确定它们绝对不能使用。
其实是固定的吗? 很久以前我切换到hasError,但是现在我正在尝试并且无法重现该错误。 myControl.errors.maxlength
不会为我产生任何红色波浪状。 这与语言服务扩展0.801.1配合使用,该扩展使用库的v8.1.x(如果有帮助)。
@ thw0rted因此,在用myControl.errors.required
和.pattern
重新测试后,(意识到我错过了input标签上的required
属性,这导致了更大的失败),他们没有很好的工作。
Required
多数有效,但是会弹出一些奇怪的错误(缺少捕获错误,不幸的是它们不一致),并且pattern
在模式错误但似乎未更新时触发当模式正确时。
另外,我有相同的vsCode语言扩展,但仍然奇怪地看到弯曲。
目前要坚持使用.hasError
解决方案,并且可能仍会建议对文档进行更新,至少是将其作为更清晰/最佳实践使用。
我发现,每当您引用定义为“ any”的属性时,都会出现此错误。 另一个解决方法是使用括号属性注释clientFirstName?.errors ['required'],它也很愚蠢。
这为我消除了错误。 作为参考,即使在概述了错误的情况下,该代码仍然有效,我只是不喜欢在代码中看到红线。
是的,将密钥作为字符串放入会删除红线。
但是您将失去诸如正确拼写和自动完成功能之类的功能。
除了使用hasError()之外,访问窗体的子控件还应该使用get()而不是点访问。 例如
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。['必需']失败
这对我有用:
f ['email']。errors.required
最有用的评论
这为我工作:
希望对您有帮助。