【发布时间】:2020-07-28 06:51:03
【问题描述】:
我有一个基于 Spring-Boot 的 Jhipster 使用 Angular 生成的项目。在项目中是一个 Person 实体。我想知道如何在名字字段的输入中过滤 html CRUD 表。
所以如果我输入“bob”,我会得到所有包含“bob”的名字。类似于此question。这个过滤器应该从后端/服务器端获取数据,而不仅仅是当前页面上显示的内容。
我是 Angular 新手,所以详细回答需要修改哪些文件会很有帮助。
已在 jhipster 中启用过滤。我希望输入触发过滤器服务器端。
我的桌子是这样的:
我试过已经添加到我的html中了:
<th>
<form [formGroup]="userForm" (ngSubmit)="onEnter()">
<input type="text" class="form-control" formControlName="firstname">
<input type="submit" style="position: absolute; left: -9999px; width: 1px; height: 1px;"/>
</form>
</th>
在 person.component.ts 中我创建了一个方法来捕获 enter 事件:
onEnter(): void {
alert(JSON.stringify(this.userForm.value));
this.personService.lastnameContains(this.userForm.value)
}
看看 person.service.ts 里面有一些更新、删除的例子,我有这个方法:
lastnameContains(lastname: string): Observable<EntityArrayResponseType> {
return this.http
.get<IPerson[]>(`${this.resourceUrl}?lastname.contains=${lastname}`, { observe: 'response' })
.pipe(map((res: EntityResponseType) => this.convertDateFromServer(res)));
}
请求发送到的 URL 应该是:
“http://localhost:8080/api/people?lastname.contains=searchstring”
更新
服务中有一个生成的查询方法:
query(req?: any): Observable<EntityArrayResponseType> {
const options = createRequestOption(req);
return this.http
.get<IPerson[]>(this.resourceUrl, { params: options, observe: 'response' })
.pipe(map((res: EntityArrayResponseType) => this.convert1DateArrayFromServer(res)));
}
但它似乎没有办法将请求定向到正确的 URL。
上图显示代码正在被调用。但是根本没有任何东西发送到服务器,更不用说 /api/person?lastname="somestring"
如何实现这种过滤。 Jhispter 文档充其量是很少的。
【问题讨论】:
-
这很正常,
person可能是由表体中的*ngFor定义的,并且您是从行循环之外的表头中引用它。目前尚不清楚您是要过滤客户端还是服务器端。对于服务器端,JHipster 有 JPA 实体过滤,见jhipster.tech/entities-filtering -
@GaëlMarziou - 谢谢。我已经更新了问题。如果您能够重新查看答案,请?
-
然后使用jhipster.tech/entities-filtering 并修改您的用户界面以添加搜索表单。如果您的输入在 ngFor 之外,那么它们必须引用您的组件中定义的变量。有很多关于如何做到这一点的教程。
-
在您的组件中构建一个响应式表单并将其绑定到您在模板中的输入,请参阅angular.io/guide/reactive-forms
-
@Al-Grant - 这不是 React,它是“反应式”……这是一种编码范式。
标签: java angular spring-boot jhipster