angular - PrimeNG 数据表验证

标签 angular typescript primeng primeng-datatable

我正在将 PrimeNG DataTable 与 Angular 结合使用,并尝试实现与此类似的东西 StackBlitz

如何在我尝试编辑的行上添加必填字段验证器?基本上,当他们编辑评论时,我需要确保他们输入了文本。

HTML

<p-table #dt  [value]="iToDoList" dataKey="ID"  [paginator]="true" [rowsPerPageOptions]="[10,50,100]" [rows]="10">
     <ng-template pTemplate="header">
         <tr>
            <th>ID</th>
            <th>Comment</th>
            <th>Action</th>
         </tr>
     </ng-template>
     <ng-template pTemplate="body" let-row>  
         <tr>
            <td>{{row.ID}}</td>
            <td>
                <div  *ngIf="!row.isEditable">{{row.Comment}}</div>
                <div *ngIf="row.isEditable">
                     <input type="text" [(ngModel)]="row.comment">
                </div>
            </td>
            <td><button (click)="editRow(row)">Edit</button></td>
            <td>                                
               <button (click)="save(row)">Save</button>
            </td>
          </tr>
     </ng-template>
</p-table>

组件.ts

iToDoList: IToDoList[] = null;

ngOnInit(): void {
     this.GetToDoList(this.userID);
}

GetToDoList(ID: string) {
    this._dashboardService.getToDoList(ID)
            .subscribe(
            data => {
                this.iToDoList = data.result;
                data.map(row => {
                    row.isEditable = false;
                });    
            },
    error => console.log('GetControls Method: ' + <any>error, 'alert alert-danger'));
}

editRow(row) {
    console.log("row " + row.ID)
    this.iToDoList.filter(row => row.isEditable).map(r => { r.isEditable = false; return r })
    row.isEditable = true;
}  

最佳答案

用户单击“保存”按钮后,您可以检查用户输入。像这样的东西:

save(row) {
    if (row.comment === "") {
      alert('Please enter a comment');
    } else {
      row.isEditable = false
    }
  }

参见StackBlitz从您加入的那个 fork 出来。

__

编辑

1) 您可以在输入旁边添加一个span:

<input type="text" [(ngModel)]="row.name">
<span *ngIf="isEmpty(row.name)" class="error">Enter a name</span>

以及相关的TS代码:

  isEmpty(input) {
    return input.replace(/\s/g, '') === "";
  }

2) 检查整行用户输入以启用或禁用保存按钮:

  disableSaveButton(row) {
    if (row.name === '' || row.city === '') {
      return true;
    }
    return false;
  }

以及相关的 HTML :

<button (click)="save(row)" [disabled]="disableSaveButton(row)">Save</button>

参见StackBlitz

关于angular - PrimeNG 数据表验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50499502/

相关文章:

reactjs - Typescript 路径别名找不到图像、样式和其他文件扩展名

javascript - PrimeNG:滚动时粘贴表格标题

angular - PrimeNG p-table : in edit mode, 如果验证出现错误,我可以保持编辑模式吗?

css - 我可以直接从 chrome DevTools 编辑我的 Angular 元素的 CSS 文件吗?

具有相同参数的 TypeScript 多个返回类型

charts - 图表在 Angular2 中不起作用

angular - 样式不适用于组件级别但适用于全局级别

javascript - 替换响应中的特殊字符和空格

angular - NPM INSTALL 在 Angular 项目内时出错

node.js - 在 Visual Studio 2015 for Angular2 上启动项目