在 Angular 应用程序中构建一个 API 调用持有多个过滤器选择的值
Building an API Call Holding Multiple Filter-selected Values in Angular App
我的 Angular 应用程序中有一系列复选框过滤器,当用户在视图中单击它们时,应该触发查询 API 到 return 过滤的功能结果。当一次使用一个过滤器时,我可以使用这些过滤器。但是,我很难弄清楚如何构建函数以便它可以容纳所有当前选择的过滤器。函数调用利用了 Mongoose/MongoDB 特性,让我们可以将对应于字段的 key/value 对直接传递到 post 请求的负载中。
这是我最初拥有的(有效,但只能通过 if/else 语句一次处理一个过滤器)。它基本上说,如果 "type" 是 "lan",则相应地分配值。如果没有提供任何值(即用户已取消选择所有过滤器),则只需发送一个 API 调用请求而不包括任何输入参数(最后一个 "else" 这里):
onFilterReceived(value, type) {
if (type === 'lan' && value) {
this.filtersService.getByFilter(this.page, this.pagesize, {
"services.workflow.status" : "consulting",
"languages.primary" : { $in: value }
});
} else if (type === 'zip' && value) {
this.filtersService.getByFilter(this.page, this.pagesize, {
"services.workflow.status" : "consulting",
"zipCode" : { $in: value }
});
} else {
this.filtersService.getByFilter(this.page, this.pagesize, {
"services.workflow.status" : "consulting"
});
}
我正在通过 Angular 的 Output() 和 EventEmitter() 发送 "value" 和相应的 "type",如下所示:
<list [records]="records"
(sendLanguage)="onFilterReceived($event, type = 'lan')"
(sendZipcode)="onFilterReceived($event, type = 'zip')">
</list>
同样,以上所有工作 按原样。
然而,我想要做的是构建这个函数,当接收到的值是 "lan" 类型时,在这种情况下应用相应的 "value"至 "value" 此处:
"languages.primary" : { $in: value }
然后当接收到的值具有对应类型 "zip" 时,"value" 将应用到 "value" 此处:
"zipCode" : { $in: value }
最终目标是我将能够通过 API 发送请求,同时保存多个过滤器的值。
我已经尝试了很多配方,但到目前为止还无法让它发挥预期的作用。我一直在使用 'if/else' 语句,就像上面那样,但同样,这只会让我一次保存一个过滤器的值。我如何才能确保我传递了每个当前选定的过滤器值?
如果有人能提供一个基本示例来说明如何制定这种逻辑,那将非常有帮助。
body: any = {'services.workflow.status':'consulting'};
private processType(name: string, para: any) {
if (this.body[name]) // toggle filter, removing or adding
delete this.body[name];
else
this.body[name] = { $in: para };
}
onFilterReceived(para: any, type: string) {
if (type == 'lan') {
this.processType('languages.primary', para);
}
if (type == 'zip') {
this.processType('zipCode', para);
}
if (type == 'nat') {
this.processType('services.service', para);
}
console.log(this.body);
this.filtersService.getByFilter(this.page, this.pagesize, this.body)
.subscribe(resRecordsData => {
this.records = resRecordsData;
},
responseRecordsError => this.errorMsg = responseRecordsError
);
}
我的 Angular 应用程序中有一系列复选框过滤器,当用户在视图中单击它们时,应该触发查询 API 到 return 过滤的功能结果。当一次使用一个过滤器时,我可以使用这些过滤器。但是,我很难弄清楚如何构建函数以便它可以容纳所有当前选择的过滤器。函数调用利用了 Mongoose/MongoDB 特性,让我们可以将对应于字段的 key/value 对直接传递到 post 请求的负载中。
这是我最初拥有的(有效,但只能通过 if/else 语句一次处理一个过滤器)。它基本上说,如果 "type" 是 "lan",则相应地分配值。如果没有提供任何值(即用户已取消选择所有过滤器),则只需发送一个 API 调用请求而不包括任何输入参数(最后一个 "else" 这里):
onFilterReceived(value, type) {
if (type === 'lan' && value) {
this.filtersService.getByFilter(this.page, this.pagesize, {
"services.workflow.status" : "consulting",
"languages.primary" : { $in: value }
});
} else if (type === 'zip' && value) {
this.filtersService.getByFilter(this.page, this.pagesize, {
"services.workflow.status" : "consulting",
"zipCode" : { $in: value }
});
} else {
this.filtersService.getByFilter(this.page, this.pagesize, {
"services.workflow.status" : "consulting"
});
}
我正在通过 Angular 的 Output() 和 EventEmitter() 发送 "value" 和相应的 "type",如下所示:
<list [records]="records"
(sendLanguage)="onFilterReceived($event, type = 'lan')"
(sendZipcode)="onFilterReceived($event, type = 'zip')">
</list>
同样,以上所有工作 按原样。
然而,我想要做的是构建这个函数,当接收到的值是 "lan" 类型时,在这种情况下应用相应的 "value"至 "value" 此处:
"languages.primary" : { $in: value }
然后当接收到的值具有对应类型 "zip" 时,"value" 将应用到 "value" 此处:
"zipCode" : { $in: value }
最终目标是我将能够通过 API 发送请求,同时保存多个过滤器的值。
我已经尝试了很多配方,但到目前为止还无法让它发挥预期的作用。我一直在使用 'if/else' 语句,就像上面那样,但同样,这只会让我一次保存一个过滤器的值。我如何才能确保我传递了每个当前选定的过滤器值?
如果有人能提供一个基本示例来说明如何制定这种逻辑,那将非常有帮助。
body: any = {'services.workflow.status':'consulting'};
private processType(name: string, para: any) {
if (this.body[name]) // toggle filter, removing or adding
delete this.body[name];
else
this.body[name] = { $in: para };
}
onFilterReceived(para: any, type: string) {
if (type == 'lan') {
this.processType('languages.primary', para);
}
if (type == 'zip') {
this.processType('zipCode', para);
}
if (type == 'nat') {
this.processType('services.service', para);
}
console.log(this.body);
this.filtersService.getByFilter(this.page, this.pagesize, this.body)
.subscribe(resRecordsData => {
this.records = resRecordsData;
},
responseRecordsError => this.errorMsg = responseRecordsError
);
}