【问题标题】:PrimeNG Datatable validationPrimeNG 数据表验证
【发布时间】:2018-11-03 02:24:28
【问题描述】:

我正在使用带有 Angular 的 PrimeNG DataTable 并尝试实现类似于 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>

component.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;
}  

【问题讨论】:

    标签: angular typescript primeng primeng-datatable


    【解决方案1】:

    一旦用户单击保存按钮,您就可以检查用户输入。类似的东西:

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

    请参阅 StackBlitz 从您加入的那个分支。

    __

    编辑

    1) 你可以在你的 input 旁边添加一个 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

    【讨论】:

    • 是的,我知道这个解决方案,但我正在寻找更好的解决方案,特别是当您有多个列时。想象一下在数据表中有 5 个输入列,我希望它是即时的。根据您修改的笨拙,当用户删除他们的输入时,会在字段旁边放置一条消息,表示必填,“保存”按钮将在他们输入内容之前被禁用
    • 好的,请检查我的编辑并告诉我现在是否可以。
    • 好主意,但如何禁用保存按钮?假设两者都是空的城市和来自 blunker 的名称..我将如何确保禁用保存按钮...当前跨度将起作用,但它不会阻止用户点击保存
    • 我完成了我的编辑
    • 问题是如果用户在输入框中输入一个空格,验证就会消失..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-16
    • 2017-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多