Angular PrimeNG表行编辑

Angular PrimeNG表行编辑

Angular PrimeNG是一个开源的框架,有丰富的原生Angular UI组件,用来做很好的造型,这个框架用来做响应式的网站非常容易。它提供了大量的模板、组件、主题设计、广泛的图标库等等。在这篇文章中,我们将学习Angular PrimeNG表行编辑。

行编辑有助于编辑每一个单独的行,然后修改该行的内容,同时保存它们。这种方法使用手动编辑和保存。

语法:表行编辑的方法如下。

<p-table [value]="tutorials" dataKey="title" editMode="row">
  <ng-template pTemplate="body" let-tutorial 
    let-editing="editing" let-ri="rowIndex">
    <tr [pEditableRow]="tutorial">
      <td>
        <p-cellEditor>
          <ng-template pTemplate="input">
            <input pInputText type="text" 
              [(ngModel)]="tutorial.title" />
          </ng-template>
          <ng-template pTemplate="output">
            {{ tutorial.title }}
          </ng-template>
        </p-cellEditor>
      </td>
    </tr>
  </ng-template>
</p-table>
HTML

创建Angular应用程序和模块安装。

第1步:使用以下命令创建一个Angular应用程序。

ng new geeks_angular
JavaScript

第2步:在创建你的项目文件夹即geeks_angular之后,使用以下命令移动到它。

cd geeks_angular
JavaScript

第3步 。在你给定的目录中安装PrimeNG。

npm install primeng --save
npm install primeicons --save
JavaScript

项目结构:安装成功后,将显示以下项目结构。

Angular PrimeNG表行编辑

例子1:在下面的例子中,我们有一个带有Angular PrimeNG的行编辑功能的表。

  • app.component.html:
<h1 style="color:green;
           text-align:center;">
  GeeksforGeeks
</h1>
<h3>Angular PrimeNG Table Row Editing</h3>
<h5>Basic</h5>
  
<p-table #dt [value]="tutorials" 
             dataKey="index"
             editMode="row" 
             responsiveLayout="scroll">
    <ng-template pTemplate="caption">
        <div class="table-header">
            List of Tutorials
            <span class="p-input-icon-left">
                <i class="pi pi-search"></i>
                <input pInputText type="text" 
                       (input)=
    "dt.filterGlobal($event.target.value, 'contains')" 
                       placeholder="Global Search" />
            </span>
        </div>
    </ng-template>
    <ng-template pTemplate="header">
        <tr>
            <th style="width: 3rem"></th>
            <th pSortableColumn="title">
                Title <p-sortIcon field="title"></p-sortIcon>
            </th>
            <th pSortableColumn="category">
                Category <p-sortIcon field="category"></p-sortIcon>
            </th>
            <th pSortableColumn="rating">
                Rating <p-sortIcon field="rating"></p-sortIcon>
            </th>
            <th style="width:8rem"></th>
        </tr>
    </ng-template>
    <ng-template pTemplate="body" 
                 let-tutorial let-editing="editing"
                 let-ri="rowIndex">
        <tr [pEditableRow]="tutorial">
            <td>
                <p-tableCheckbox [value]="tutorial" 
                                 [index]="ri">
                </p-tableCheckbox>
            </td>
            <td>
                <p-cellEditor>
                    <ng-template pTemplate="input">
                        <input pInputText type="text" 
                               [(ngModel)]="tutorial.title" />
                    </ng-template>
                    <ng-template pTemplate="output">
                        {{ tutorial.title }}
                    </ng-template>
                </p-cellEditor>
            </td>
            <td>
                <p-cellEditor>
                    <ng-template pTemplate="input">
                        <input pInputText type="text" 
                               [(ngModel)]="tutorial.category" />
                    </ng-template>
                    <ng-template pTemplate="output">
                        {{ tutorial.category }}
                    </ng-template>
                </p-cellEditor>
            </td>
            <td>
                <p-cellEditor>
                    <ng-template pTemplate="input">
                        <input pInputText type="text" 
                               [(ngModel)]="tutorial.rating" />
                    </ng-template>
                    <ng-template pTemplate="output">
                        {{ tutorial.rating }}
                    </ng-template>
                </p-cellEditor>
            </td>
  
            <td style="text-align:center">
                <button *ngIf="!editing"
                          pButton pRipple type="button" 
                          pInitEditableRow icon="pi pi-pencil" 
                          (click)="onRowEditInit(tutorial, ri)" 
                          class="p-button-rounded p-button-text">
                </button>
                <button *ngIf="editing" 
                          pButton pRipple type="button" 
                          pSaveEditableRow icon="pi pi-check" 
                          (click)="onRowEditSave(tutorial, ri)" 
                          class="p-button-rounded 
                                 p-button-text 
                                 p-button-success mr-2">
                </button>
            </td>
        </tr>
    </ng-template>
</p-table>
HTML
  • app.component.ts
import { Component, OnInit, ViewChild } from '@angular/core';
import { Table } from 'primeng/table';
import { PrimeNGConfig } from 'primeng/api';
import { MessageService } from 'primeng/api';
  
@Component({
    selector: 'app-root',
    templateUrl: './app.component.html',
    styles: [
        `
  :host ::ng-deep .p-cell-editing {
      padding-top: 0 !important;
      padding-bottom: 0 !important;
  }
`,
    ],
})
export class AppComponent {
    tutorials: Tutorial[];
    @ViewChild('dt') table: Table;
    clonedTutorials: { [s: string]: Tutorial } = {};
    constructor(private primengConfig: PrimeNGConfig) { }
  
    ngOnInit() {
        this.tutorials = [
            {
                title: 'Queue',
                category: 'Data Structure',
                rating: 8,
            },
            {
                title: 'Circularly LinkedList',
                category: 'Data Structure',
                rating: 1,
            },
            {
                title: 'Doubly LinkedList',
                category: 'Data Structure',
                rating: 3,
            },
            {
                title: 'Singly LinkedList',
                category: 'Data Structure',
                rating: 5,
            },
            {
                title: 'Doubly Ended Queue',
                category: 'Data Structure',
                rating: 10,
            },
            {
                title: 'Binary Search Tree',
                category: 'Data Structure',
                rating: 2,
            },
            {
                title: 'Red Black Tree',
                category: 'Data Structure',
                rating: 9,
            },
            {
                title: 'Breadth First Search',
                category: 'Graph',
                rating: 6,
            },
            {
                title: "Floyd's Cycle",
                category: 'Algorithm',
                rating: 7,
            },
            {
                title: 'Travelling Salesman Problem',
                category: 'Algorithm',
                rating: 4,
            },
            {
                title: 'Bellman Ford',
                category: 'Graph',
                rating: 8,
            },
            {
                title: 'KMP Algorithm',
                category: 'String',
                rating: 10,
            },
        ];
  
        this.primengConfig.ripple = true;
    }
    onRowEditInit(tutorial: Tutorial, index: number) {
        this.clonedTutorials[index] = { ...this.tutorials[index] };
    }
  
    onRowEditSave(tutorial: Tutorial, index: number) {
        if (tutorial.rating > 0) {
            delete this.clonedTutorials[index];
        } else {
        }
    }
}
export interface Tutorial {
    title?: string;
    category?: string;
    rating?: number;
}
JavaScript
  • app.module.ts
import { NgModule } from '@angular/core';
import { BrowserModule } 
    from '@angular/platform-browser';
import { FormsModule } from '@angular/forms';
import { BrowserAnimationsModule } 
    from '@angular/platform-browser/animations';
import { AppComponent } from './app.component';
import { TableModule } from 'primeng/table';
import { MultiSelectModule } from 'primeng/multiselect';
import { ButtonModule } from 'primeng/button';
import { InputTextModule } from 'primeng/inputtext';
  
@NgModule({
    imports: [
        BrowserModule,
        BrowserAnimationsModule,
        TableModule,
        MultiSelectModule,
        ButtonModule,
        InputTextModule,
        FormsModule,
    ],
    declarations: [AppComponent],
    bootstrap: [AppComponent],
})
export class AppModule { }
JavaScript

输出:

Angular PrimeNG表行编辑

例子2:在下面的例子中,我们可以选择取消Angular PrimeNG中的单元格的编辑。

  • app.component.html:
<h1 style="color:green;
           text-align:center;">
    GeeksforGeeks
</h1>
<h3>Angular PrimeNG Table Row Editing</h3>
<h5>Basic</h5>
  
<p-table #dt [value]="tutorials" 
             dataKey="index" 
             editMode="row" 
             responsiveLayout="scroll">
    <ng-template pTemplate="caption">
        <div class="table-header">
            List of Tutorials
            <span class="p-input-icon-left">
                <i class="pi pi-search"></i>
                <input pInputText type="text" 
                       (input)=
    "dt.filterGlobal($event.target.value, 'contains')" 
                        placeholder="Global Search" />
            </span>
        </div>
    </ng-template>
    <ng-template pTemplate="header">
        <tr>
            <th style="width: 3rem"></th>
            <th pSortableColumn="title">
                Title <p-sortIcon field="title"></p-sortIcon>
            </th>
            <th pSortableColumn="category">
                Category <p-sortIcon field="category"></p-sortIcon>
            </th>
            <th pSortableColumn="rating">
                Rating <p-sortIcon field="rating"></p-sortIcon>
            </th>
            <th style="width:8rem"></th>
        </tr>
    </ng-template>
    <ng-template pTemplate="body" 
                 let-tutorial let-editing="editing" 
                 let-ri="rowIndex">
        <tr [pEditableRow]="tutorial">
            <td>
                <p-tableCheckbox [value]="tutorial" 
                                 [index]="ri">
                </p-tableCheckbox>
            </td>
            <td>
                <p-cellEditor>
                    <ng-template pTemplate="input">
                        <input pInputText type="text" 
                               [(ngModel)]="tutorial.title" />
                    </ng-template>
                    <ng-template pTemplate="output">
                        {{ tutorial.title }}
                    </ng-template>
                </p-cellEditor>
            </td>
            <td>
                <p-cellEditor>
                    <ng-template pTemplate="input">
                        <input pInputText type="text" 
                               [(ngModel)]="tutorial.category" />
                    </ng-template>
                    <ng-template pTemplate="output">
                        {{ tutorial.category }}
                    </ng-template>
                </p-cellEditor>
            </td>
            <td>
                <p-cellEditor>
                    <ng-template pTemplate="input">
                        <input pInputText type="text" 
                               [(ngModel)]="tutorial.rating" />
                    </ng-template>
                    <ng-template pTemplate="output">
                        {{ tutorial.rating }}
                    </ng-template>
                </p-cellEditor>
            </td>
  
            <td style="text-align:center">
                <button *ngIf="!editing" 
                         pButton pRipple type="button" 
                         pInitEditableRow icon="pi pi-pencil" 
                         (click)="onRowEditInit(tutorial, ri)" 
                         class="p-button-rounded 
                                p-button-text">
                </button>
                <button *ngIf="editing" 
                         pButton pRipple type="button" 
                         pSaveEditableRow icon="pi pi-check" 
                         (click)="onRowEditSave(tutorial, ri)" 
                         class="p-button-rounded 
                                p-button-text 
                                p-button-success mr-2">
                </button>
                <button *ngIf="editing" 
                         pButton pRipple type="button" 
                         pCancelEditableRow icon="pi pi-times" 
                         (click)="onRowEditCancel(tutorial, ri)" 
                         class="p-button-rounded 
                                p-button-text 
                                p-button-danger">
                </button>
            </td>
        </tr>
    </ng-template>
</p-table>
HTML
  • app.component.ts:
import { Component, OnInit, ViewChild } from '@angular/core';
import { Table } from 'primeng/table';
import { PrimeNGConfig } from 'primeng/api';
import { MessageService } from 'primeng/api';
  
@Component({
    selector: 'app-root',
    templateUrl: './app.component.html',
    styles: [
        `
  :host ::ng-deep .p-cell-editing {
      padding-top: 0 !important;
      padding-bottom: 0 !important;
  }
`,
    ],
})
export class AppComponent {
    tutorials: Tutorial[];
    @ViewChild('dt') table: Table;
    clonedTutorials: { [s: string]: Tutorial } = {};
    constructor(private primengConfig: PrimeNGConfig) { }
  
    ngOnInit() {
        this.tutorials = [
            {
                title: 'Queue',
                category: 'Data Structure',
                rating: 8,
            },
            {
                title: 'Circularly LinkedList',
                category: 'Data Structure',
                rating: 1,
            },
            {
                title: 'Doubly LinkedList',
                category: 'Data Structure',
                rating: 3,
            },
            {
                title: 'Singly LinkedList',
                category: 'Data Structure',
                rating: 5,
            },
            {
                title: 'Doubly Ended Queue',
                category: 'Data Structure',
                rating: 10,
            },
            {
                title: 'Binary Search Tree',
                category: 'Data Structure',
                rating: 2,
            },
            {
                title: 'Red Black Tree',
                category: 'Data Structure',
                rating: 9,
            },
            {
                title: 'Breadth First Search',
                category: 'Graph',
                rating: 6,
            },
            {
                title: "Floyd's Cycle",
                category: 'Algorithm',
                rating: 7,
            },
            {
                title: 'Travelling Salesman Problem',
                category: 'Algorithm',
                rating: 4,
            },
            {
                title: 'Bellman Ford',
                category: 'Graph',
                rating: 8,
            },
            {
                title: 'KMP Algorithm',
                category: 'String',
                rating: 10,
            },
        ];
  
        this.primengConfig.ripple = true;
    }
    onRowEditInit(tutorial: Tutorial, index: number) {
        this.clonedTutorials[index] = { ...this.tutorials[index] };
    }
  
    onRowEditSave(tutorial: Tutorial, index: number) {
        if (tutorial.rating > 0) {
            delete this.clonedTutorials[index];
        } else {
        }
    }
  
    onRowEditCancel(tutorial: Tutorial, index: number) {
        this.tutorials[index] = this.clonedTutorials[index];
        delete this.clonedTutorials[index];
    }
}
export interface Tutorial {
    title?: string;
    category?: string;
    rating?: number;
}
JavaScript
  • app.module.ts
import { NgModule } from '@angular/core';
import { BrowserModule } 
    from '@angular/platform-browser';
import { FormsModule } from '@angular/forms';
import { BrowserAnimationsModule } 
    from '@angular/platform-browser/animations';
import { AppComponent } from './app.component';
import { TableModule } from 'primeng/table';
import { MultiSelectModule } from 'primeng/multiselect';
import { ButtonModule } from 'primeng/button';
import { InputTextModule } from 'primeng/inputtext';
  
@NgModule({
    imports: [
        BrowserModule,
        BrowserAnimationsModule,
        TableModule,
        MultiSelectModule,
        ButtonModule,
        InputTextModule,
        FormsModule,
    ],
    declarations: [AppComponent],
    bootstrap: [AppComponent],
})
export class AppModule { }
JavaScript

输出:

Angular PrimeNG表行编辑

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册