JHipster/ANGLING-如何处理generator/../entity-management.component.ts.ejs(在JHipster 6.6.0中)中转换()的移除 [英] JHipster/Angular - How to deal with removal of transition() in generator/../entity-management.component.ts.ejs (in JHipster 6.6.0)
问题描述
我开始通过使用JHipster 6.5.0的";Full Stack Development with JHipster(第二版)&Quot;一本书学习JHipster。
在第5章《定制和进一步开发》中,默认的表格视图被列表所取代。为了恢复排序功能,作者包括以下jhiSort指令(第134页): JhiSort[(谓词)]=谓词[(升序)]=反转&[callback]=";transition.bind(this)";作为此代码片段的一部分:
<div class="mb-2 d-flex justify-content-end align-items-center">
<span class="mx-2 col-1">Sort by</span>
<div class="btn-group" role="group" jhiSort [(predicate)]="predicate" [(ascending)]="reverse" [callback]="transition.bind(this)">
<button type="button" class="btn btn-light" jhiSortBy="name">
<span class="d-flex">
<span jhiTranslate="storeApp.product.name">Name</span>
<fa-icon [icon]="'sort'"></fa-icon>
</span>
</button>
...
</div>
</div>
因此,无法解析";反向";和";Transition.ind(This)";。我将";Product.Components.ts";文件与本书源代码中的文件进行了比较,发现我的文件中不存在";Migration()";函数
Product.Components.ts(JHipster 7.0.0.)
import { Component, OnInit } from '@angular/core';
import { HttpHeaders, HttpResponse } from '@angular/common/http';
import { ActivatedRoute, Router } from '@angular/router';
import { combineLatest } from 'rxjs';
import { NgbModal } from '@ng-bootstrap/ng-bootstrap';
import { IProduct } from '../product.model';
import { ITEMS_PER_PAGE } from 'app/config/pagination.constants';
import { ProductService } from '../service/product.service';
import { ProductDeleteDialogComponent } from '../delete/product-delete-dialog.component';
import { DataUtils } from 'app/core/util/data-util.service';
@Component({
selector: 'jhi-product',
templateUrl: './product.component.html',
})
export class ProductComponent implements OnInit {
products?: IProduct[];
isLoading = false;
totalItems = 0;
itemsPerPage = ITEMS_PER_PAGE;
page?: number;
predicate!: string;
ascending!: boolean;
ngbPaginationPage = 1;
constructor(
protected productService: ProductService,
protected activatedRoute: ActivatedRoute,
protected dataUtils: DataUtils,
protected router: Router,
protected modalService: NgbModal
) {}
loadPage(page?: number, dontNavigate?: boolean): void {
this.isLoading = true;
const pageToLoad: number = page ?? this.page ?? 1;
this.productService
.query({
page: pageToLoad - 1,
size: this.itemsPerPage,
sort: this.sort(),
})
.subscribe(
(res: HttpResponse<IProduct[]>) => {
this.isLoading = false;
this.onSuccess(res.body, res.headers, pageToLoad, !dontNavigate);
},
() => {
this.isLoading = false;
this.onError();
}
);
}
ngOnInit(): void {
this.handleNavigation();
}
trackId(index: number, item: IProduct): number {
return item.id!;
}
byteSize(base64String: string): string {
return this.dataUtils.byteSize(base64String);
}
openFile(base64String: string, contentType: string | null | undefined): void {
return this.dataUtils.openFile(base64String, contentType);
}
delete(product: IProduct): void {
const modalRef = this.modalService.open(ProductDeleteDialogComponent, { size: 'lg', backdrop: 'static' });
modalRef.componentInstance.product = product;
// unsubscribe not needed because closed completes on modal close
modalRef.closed.subscribe(reason => {
if (reason === 'deleted') {
this.loadPage();
}
});
}
protected sort(): string[] {
const result = [this.predicate + ',' + (this.ascending ? 'asc' : 'desc')];
if (this.predicate !== 'id') {
result.push('id');
}
return result;
}
protected handleNavigation(): void {
combineLatest([this.activatedRoute.data, this.activatedRoute.queryParamMap]).subscribe(([data, params]) => {
const page = params.get('page');
const pageNumber = page !== null ? +page : 1;
const sort = (params.get('sort') ?? data['defaultSort']).split(',');
const predicate = sort[0];
const ascending = sort[1] === 'asc';
if (pageNumber !== this.page || predicate !== this.predicate || ascending !== this.ascending) {
this.predicate = predicate;
this.ascending = ascending;
this.loadPage(pageNumber, true);
}
});
}
protected onSuccess(data: IProduct[] | null, headers: HttpHeaders, page: number, navigate: boolean): void {
this.totalItems = Number(headers.get('X-Total-Count'));
this.page = page;
if (navigate) {
this.router.navigate(['/product'], {
queryParams: {
page: this.page,
size: this.itemsPerPage,
sort: this.predicate + ',' + (this.ascending ? 'asc' : 'desc'),
},
});
}
this.products = data ?? [];
this.ngbPaginationPage = this.page;
}
protected onError(): void {
this.ngbPaginationPage = this.page ?? 1;
}
}
当它存在于作者的文件或使用JHipster 6.5.0生成的文件中时。:
Product.Components.ts(JHipster 6.5.0)
import { Component, OnInit, OnDestroy } from '@angular/core';
import { HttpHeaders, HttpResponse } from '@angular/common/http';
import { ActivatedRoute, Router } from '@angular/router';
import { Subscription } from 'rxjs';
import { JhiEventManager, JhiParseLinks, JhiDataUtils } from 'ng-jhipster';
import { NgbModal } from '@ng-bootstrap/ng-bootstrap';
import { IProduct } from 'app/shared/model/product.model';
import { ITEMS_PER_PAGE } from 'app/shared/constants/pagination.constants';
import { ProductService } from './product.service';
import { ProductDeleteDialogComponent } from './product-delete-dialog.component';
@Component({
selector: 'jhi-product',
templateUrl: './product.component.html'
})
export class ProductComponent implements OnInit, OnDestroy {
products: IProduct[];
error: any;
success: any;
eventSubscriber: Subscription;
routeData: any;
links: any;
totalItems: any;
itemsPerPage: any;
page: any;
predicate: any;
previousPage: any;
reverse: any;
constructor(
protected productService: ProductService,
protected parseLinks: JhiParseLinks,
protected activatedRoute: ActivatedRoute,
protected dataUtils: JhiDataUtils,
protected router: Router,
protected eventManager: JhiEventManager,
protected modalService: NgbModal
) {
this.itemsPerPage = ITEMS_PER_PAGE;
this.routeData = this.activatedRoute.data.subscribe(data => {
this.page = data.pagingParams.page;
this.previousPage = data.pagingParams.page;
this.reverse = data.pagingParams.ascending;
this.predicate = data.pagingParams.predicate;
});
}
loadAll() {
this.productService
.query({
page: this.page - 1,
size: this.itemsPerPage,
sort: this.sort()
})
.subscribe((res: HttpResponse<IProduct[]>) => this.paginateProducts(res.body, res.headers));
}
loadPage(page: number) {
if (page !== this.previousPage) {
this.previousPage = page;
this.transition();
}
}
transition() {
this.router.navigate(['/product'], {
queryParams: {
page: this.page,
size: this.itemsPerPage,
sort: this.predicate + ',' + (this.reverse ? 'asc' : 'desc')
}
});
this.loadAll();
}
clear() {
this.page = 0;
this.router.navigate([
'/product',
{
page: this.page,
sort: this.predicate + ',' + (this.reverse ? 'asc' : 'desc')
}
]);
this.loadAll();
}
ngOnInit() {
this.loadAll();
this.registerChangeInProducts();
}
ngOnDestroy() {
this.eventManager.destroy(this.eventSubscriber);
}
trackId(index: number, item: IProduct) {
return item.id;
}
byteSize(field) {
return this.dataUtils.byteSize(field);
}
openFile(contentType, field) {
return this.dataUtils.openFile(contentType, field);
}
registerChangeInProducts() {
this.eventSubscriber = this.eventManager.subscribe('productListModification', () => this.loadAll());
}
delete(product: IProduct) {
const modalRef = this.modalService.open(ProductDeleteDialogComponent, { size: 'lg', backdrop: 'static' });
modalRef.componentInstance.product = product;
}
sort() {
const result = [this.predicate + ',' + (this.reverse ? 'asc' : 'desc')];
if (this.predicate !== 'id') {
result.push('id');
}
return result;
}
protected paginateProducts(data: IProduct[], headers: HttpHeaders) {
this.links = this.parseLinks.parse(headers.get('link'));
this.totalItems = parseInt(headers.get('X-Total-Count'), 10);
this.products = data;
}
}
简而言之: 今天,我能够追踪到不存在Transion()函数的原因,直到JHipster 6.6.0的221个已关闭的票据和合并的拉取请求之一: 以角度修复实体分页 #10959 by kaidohallik于2019年12月19日合并 https://github.com/jhipster/generator-jhipster/pull/10959
尽管知道更改来自何处,但我无法调整jhiSort指令以反映更改。
有人能告诉我如何调整jhiSort指令以使数据正确排序吗?
非常感谢您的支持。
推荐答案
毕竟,答案非常简单,因为在表视图被列表视图替换之前,它曾是";Product.Component.html&Quot;页面的一部分。
HTMLtr标记包含以下jhiSort指令
<tr jhiSort [(predicate)]="predicate" [(ascending)]="ascending" [callback]="loadPage.bind(this)">
如您所见,您只需使用";升序";而不是";反向";和";loadPage";而不是";转换";即可。
使用这两项更改,排序可以正常工作。
这篇关于JHipster/ANGLING-如何处理generator/../entity-management.component.ts.ejs(在JHipster 6.6.0中)中转换()的移除的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!