开发者问题收集

Angular 9 属性长度 - 无法读取未定义的属性“长度”

2020-05-11
2093

我在 Angular 9 和 TypeScript 中有一个 Web 应用程序。 在 html 文件中,当字符串长度小于 10 时,我想禁用按钮。 我的 html 代码:

<div class="p-2 form-group">
              <textarea type="text" class="form-control" id="inputCommentBody" placeholder="Text" [(ngModel)]="postCommentModel.body" rows="3"></textarea>
            </div>

<button class="btn btn-primary" (click)="addPostComment(post.id, null)" [disabled]="postCommentModel.body !== undefined || postCommentModel.body.length < 10">
              Add comment
            </button>

在 TypeScript 中,代码如下所示:

export class UserPageComponent implements OnInit {
  public postCommentModel: any = {};

出现错误:

ERROR TypeError: Cannot read property 'length' of undefined
    at UserPageComponent_div_13_Template (user-page.component.html:113)
    at executeTemplate (core.js:12059)
    at refreshView (core.js:11906)
    at refreshDynamicEmbeddedViews (core.js:13283)
    at refreshView (core.js:11929)
    at refreshComponent (core.js:13358)
    at refreshChildComponents (core.js:11635)
    at refreshView (core.js:11958)
    at refreshDynamicEmbeddedViews (core.js:13283)
    at refreshView (core.js:11929)
2个回答

您正在访问一个未定义的对象。解决方案是检查是否为 null 或 undefined(以查看对象是否存在),然后才进行迭代。

<button class="btn btn-primary" (click)="addPostComment(post.id, null)" [disabled]="postCommentModel.body === undefined || postCommentModel?.body?.length < 10">
Sajeetharan
2020-05-11

代码中的一个小错误

此处的目的是检查字段值的长度。

将 || 更改为 && 运算符,不会出现该错误 。这将确保 postCommentModel.body 具有值,然后仅进行长度检查。

使用 OR (||) 运算符,它会在页面加载时直接满足第二个条件,因为 postCommentModel.body !== undefined 为 false

<button class="btn btn-primary" (click)="addPostComment(post.id, null)" [disabled]="postCommentModel.body !== undefined && postCommentModel.body.length < 10">
Anishek Raman Bharti
2020-05-11