PrimeNG 的数据 table 未触发 onRowSelect 事件
PrimeNG's data table not firing onRowSelect event
我目前正在测试 PrimeNG 并尝试使用数据 table。一切正常,除了事件。我正在尝试使用 Growl 在行被 selected 时显示一条消息(就像 PrimeNG 网站上的事件演示)。
我目前有这个:
import { Component, OnInit, EventEmitter } from '@angular/core';
import { REACTIVE_FORM_DIRECTIVES } from '@angular/forms';
import { DataTable, Column, Schedule, Growl, Message } from 'primeng/primeng';
import { NameListService } from '../shared/index';
@Component({
moduleId: module.id,
selector: 'dash',
templateUrl: 'dashboard.component.html',
styleUrls: ['dashboard.component.css'],
directives: [REACTIVE_FORM_DIRECTIVES, DataTable, Column, Schedule]
})
export class DashboardComponent implements OnInit {
newName:string = '';
newLanguage:string = '';
errorMessage:string;
names:any[] = [];
selectedName:any;
events:any[];
cols:any[];
msgs:Message[] = [];
constructor(public nameListService:NameListService) {
}
ngOnInit() {
this.getNames();
this.cols = [
{field: 'id', header: 'ID'},
{field: 'name', header: 'Name'},
{field: 'language', header: 'Language'}
];
}
onRowSelect(event) {
this.msgs = [];
this.msgs.push({severity: 'info', summary: 'Selected',
detail:event.data.name + ' - ' + event.data.language});
}
getNames() {
this.nameListService.get()
.subscribe(
names => this.names = names,
error => this.errorMessage = <any>error
);
}
addName():boolean {
this.names.push({"name": this.newName,
"language": this.newLanguage});
this.newName = '';
this.newLanguage = '';
return false;
}
}
仪表板组件模板如下所示:
<p-growl [value]="msgs"></p-growl>
<form (submit)="addName()" style="margin-bottom:10px;">
<label>Name:</label>
<input class="form-control" [(ngModel)]="newName" name="newName"
placeholder="Enter new name..."
style="margin-bottom: 10px;">
<label>Language:</label>
<input class="form-control" [(ngModel)]="newLanguage"
name="newLanguage" placeholder="Enter new language..."
style="margin-bottom: 10px;">
<button class="btn btn-primary" type="submit"
*ngIf="newName && newLanguage"><i class="fa fa-plus"></i> Add</button>
</form>
<p-dataTable [value]="names" [(selection)]="selectedName"
selectionMode="single">
<p-column *ngFor="let col of cols" [field]="col.field"
[header]="col.header">
</p-column>
</p-dataTable>
<div *ngIf="selectedName">
<label>Selected person name:</label><br/>
<input class="form-control" [(ngModel)]="selectedName? selectedName.name: none"
readonly style="margin-bottom: 10px;"/><br/>
<label>Selected person programming language:</label><br/>
<input class="form-control"
[(ngModel)]="selectedName? selectedName.language: none"
readonly style="margin-bottom: 10px;"/><br/>
<label>Selected person birth year:</label><br/>
<input class="form-control"
[(ngModel)]="selectedName? selectedName.birthYear: none" readonly/>
</div>
但是,当我连续 select 时,事件不会触发。它不会在断点处停止,所以它根本不会注册它。关于我应该在哪里解决这个问题,是否有解决方案或建议?
您似乎忘记指定 selectionMode
:
<p-dataTable [value]="names" selectionMode="single" (onRowSelect)="onRowSelect($event)">
...
</p-dataTable>
有效值为 "single" 和 "multiple"
更新:
您还必须订阅 onRowSelect
活动
(onRowSelect)="onRowSelect($event)"
其中
(onRowSelect)
- 来自 DataTable 组件的事件名称
onRowSelect($event)
- 组件中的方法名称
您必须在 app.module.ts
中导入 FormsModule
import { FormsModule } from '@angular/forms';
我目前正在测试 PrimeNG 并尝试使用数据 table。一切正常,除了事件。我正在尝试使用 Growl 在行被 selected 时显示一条消息(就像 PrimeNG 网站上的事件演示)。 我目前有这个:
import { Component, OnInit, EventEmitter } from '@angular/core';
import { REACTIVE_FORM_DIRECTIVES } from '@angular/forms';
import { DataTable, Column, Schedule, Growl, Message } from 'primeng/primeng';
import { NameListService } from '../shared/index';
@Component({
moduleId: module.id,
selector: 'dash',
templateUrl: 'dashboard.component.html',
styleUrls: ['dashboard.component.css'],
directives: [REACTIVE_FORM_DIRECTIVES, DataTable, Column, Schedule]
})
export class DashboardComponent implements OnInit {
newName:string = '';
newLanguage:string = '';
errorMessage:string;
names:any[] = [];
selectedName:any;
events:any[];
cols:any[];
msgs:Message[] = [];
constructor(public nameListService:NameListService) {
}
ngOnInit() {
this.getNames();
this.cols = [
{field: 'id', header: 'ID'},
{field: 'name', header: 'Name'},
{field: 'language', header: 'Language'}
];
}
onRowSelect(event) {
this.msgs = [];
this.msgs.push({severity: 'info', summary: 'Selected',
detail:event.data.name + ' - ' + event.data.language});
}
getNames() {
this.nameListService.get()
.subscribe(
names => this.names = names,
error => this.errorMessage = <any>error
);
}
addName():boolean {
this.names.push({"name": this.newName,
"language": this.newLanguage});
this.newName = '';
this.newLanguage = '';
return false;
}
}
仪表板组件模板如下所示:
<p-growl [value]="msgs"></p-growl>
<form (submit)="addName()" style="margin-bottom:10px;">
<label>Name:</label>
<input class="form-control" [(ngModel)]="newName" name="newName"
placeholder="Enter new name..."
style="margin-bottom: 10px;">
<label>Language:</label>
<input class="form-control" [(ngModel)]="newLanguage"
name="newLanguage" placeholder="Enter new language..."
style="margin-bottom: 10px;">
<button class="btn btn-primary" type="submit"
*ngIf="newName && newLanguage"><i class="fa fa-plus"></i> Add</button>
</form>
<p-dataTable [value]="names" [(selection)]="selectedName"
selectionMode="single">
<p-column *ngFor="let col of cols" [field]="col.field"
[header]="col.header">
</p-column>
</p-dataTable>
<div *ngIf="selectedName">
<label>Selected person name:</label><br/>
<input class="form-control" [(ngModel)]="selectedName? selectedName.name: none"
readonly style="margin-bottom: 10px;"/><br/>
<label>Selected person programming language:</label><br/>
<input class="form-control"
[(ngModel)]="selectedName? selectedName.language: none"
readonly style="margin-bottom: 10px;"/><br/>
<label>Selected person birth year:</label><br/>
<input class="form-control"
[(ngModel)]="selectedName? selectedName.birthYear: none" readonly/>
</div>
但是,当我连续 select 时,事件不会触发。它不会在断点处停止,所以它根本不会注册它。关于我应该在哪里解决这个问题,是否有解决方案或建议?
您似乎忘记指定 selectionMode
:
<p-dataTable [value]="names" selectionMode="single" (onRowSelect)="onRowSelect($event)">
...
</p-dataTable>
有效值为 "single" 和 "multiple"
更新:
您还必须订阅 onRowSelect
活动
(onRowSelect)="onRowSelect($event)"
其中
(onRowSelect)
- 来自 DataTable 组件的事件名称onRowSelect($event)
- 组件中的方法名称
您必须在 app.module.ts
中导入 FormsModuleimport { FormsModule } from '@angular/forms';