我正在使用Angular2和Kendo for ng2。我有一个带网格控件的主/列表页面。该列表在每行中提供一个链接,以允许用户单击进入详细信息页面。主/列表页面和详细信息页面是单独的视图,而不是彼此的父/子。
当用户点击详细信息页面,进行更改,点击保存,详细信息页面将更新的数据发送到api以更新到数据库时,会发生什么。然后它使用ng2路由器导航回主/列表页面。
我发现的问题是,剑道网格中的数据似乎没有发现用户刚刚做出的任何更改。如果我导航到其他页面,然后导航回主/列表页面,最后显示更新的数据。
我正在使用Angular2版本2.2.4和Kendo Grid版本0.7.0。
组件代码:
import { Component, ViewChild, OnInit, OnDestroy } from '@angular/core';
import { Router } from '@angular/router';
import { Observable } from 'rxjs/Rx';
import { GridComponent, GridDataResult, DataStateChangeEvent } from '@progress/kendo-angular-grid';
import { SortDescriptor } from '@progress/kendo-data-query';
import { ProspectsService } from './ProspectsService';
import { Prospect } from './prospect';
declare var $: any;
declare var Layout: any;
declare var window: any;
@Component({
providers: [ProspectsService],
templateUrl: 'app/prospects/prospect-list.component.html'
})
export class ProspectList implements OnInit, OnDestroy {
private view: Observable<GridDataResult>;
private currentProspect: Prospect;
private pageSize: number = 10;
private skip: number = 0;
private sort: SortDescriptor[] = [{ dir: 'asc', field: 'Id' }];
private currentUsername: string;
@ViewChild(GridComponent) private grid: GridComponent;
constructor(private router: Router, private service: ProspectsService) {
}
public ngOnInit() {
this.GetGridSettings();
this.SaveGridSettings();
this.LoadData();
this.view = this.service;
this.currentUsername = window.Cookies.get('LIQUsername');
}
public EditProspect(item: any): void {
this.router.navigate(['/Prospect', item]);
}
public AddProspect(item: any): void {
this.router.navigate(['/Prospect', 0]);
}
public ngAfterViewInit(): void {
Layout.setSidebarMenuActiveLink('set', $('#MyProspectsLink'));
}
public dataStateChange({ skip, take, sort}: DataStateChangeEvent): void {
this.skip = skip;
this.pageSize = take;
this.sort = sort;
this.SaveGridSettings();
this.LoadData();
}
private LoadData(): void {
this.service.query({
skip: this.skip,
take: this.pageSize,
sortBy: this.sort[0].field,
sortDirection: this.sort[0].dir,
username: this.currentUsername
});
}
public ngOnDestroy() {
this.service = null;
this.grid = null;
}
}
查看HTML:
<div class="row">
<div class="col-md-11 col-sm-10">
<div class="page-head">
<div class="page-title">
<h1>My Prospects</h1>
<small>Click a column header to sort. Use the numbered buttons at the bottom to switch between pages.</small>
</div>
</div>
</div>
<div class="col-md-1 col-sm-2 col-xs-12">
<div class="">
<div class="page-toolbar">
<div class="page-actions">
<a class="btn btn-circle blue-sharp" (click)="AddProspect()">ADD</a>
</div>
</div>
</div>
</div>
</div>
<ul class="page-breadcrumb breadcrumb">
<li>
<a [routerLink]="['/Deals']">Home</a>
<i class="fa fa-circle"></i>
</li>
<li>
<span class="active">Prospects</span>
</li>
</ul>
<div class="row">
<div class="col-md-12 col-lg-12">
<div class="portlet light bordered">
<div class="portlet-title">
<div class="caption">
<span class="caption-subject font-dark bold uppercase">PROSPECT LIST</span>
</div>
</div>
<div class="portlet-body">
<div class="table-responsive">
<kendo-grid [data]="view | async"
[pageSize]="pageSize"
[sortable]="{ mode: 'single' }"
[sort]="sort"
[skip]="skip"
[pageable]="{ buttonCount: 5, info: true, type: numeric, pageSizes: true, previousNext: true }"
[scrollable]="'none'"
(dataStateChange)="dataStateChange($event)">
<kendo-grid-column>
<template kendoHeaderTemplate></template>
<template kendoCellTemplate let-dataItem><a class="btn btn-circle blue" (click)="EditProspect(dataItem.Id)">EDIT</a></template>
</kendo-grid-column>
<kendo-grid-column field="Id"></kendo-grid-column>
<kendo-grid-column field="FirstName">
<template kendoHeaderTemplate>Prospect Name</template>
<template kendoCellTemplate let-dataItem>{{ dataItem.FirstName + ' ' + dataItem.LastName }}</template>
</kendo-grid-column>
<kendo-grid-column field="Company" [style]="{'white-space': 'nowrap'}"></kendo-grid-column>
<kendo-grid-column field="Address1" [style]="{'white-space': 'nowrap'}">
<template kendoHeaderTemplate>Address</template>
</kendo-grid-column>
<kendo-grid-column field="City" [style]="{'white-space': 'nowrap'}"></kendo-grid-column>
<kendo-grid-column field="State"></kendo-grid-column>
<kendo-grid-column field="Zip"></kendo-grid-column>
<kendo-grid-column field="ContactFirstName" [style]="{'white-space': 'nowrap'}">
<template kendoHeaderTemplate>Contact Person</template>
<template kendoCellTemplate let-dataItem>{{ dataItem.ContactFirstName + ' ' + dataItem.ContactLastName }}</template>
</kendo-grid-column>
<kendo-grid-column field="ContactPhoneAreaCode" [style]="{'white-space': 'nowrap'}">
<template kendoHeaderTemplate>Contact Phone</template>
<template kendoCellTemplate let-dataItem>{{ dataItem | phone }}</template>
</kendo-grid-column>
<kendo-grid-column field="ContactEmail">
<template kendoHeaderTemplate>Contact Email</template>
</kendo-grid-column>
<kendo-grid-column field="TenantBroker">
<template kendoHeaderTemplate>Tenant Broker</template>
</kendo-grid-column>
</kendo-grid>
</div>
</div>
</div>
</div>
</div>