これを機能させるには、値が{ $in: value }
を介して渡されるときに条件付きロジックを追加する必要があります。 。ポップアップしていたエラーは、{ $in: value }
のフォーマットの問題が原因でした。 、重要なのは、渡される値がある場合にのみこれがトリガーされるようにすることでした。
したがって、最終的に、これを機能させるために、すべての可能な値の配列を渡す必要はありませんでしたが、これはエレガントでもパフォーマンスの高いソリューションでもありませんでした。これを変更しました:
private processType(name: string, value: any, body)
{
if (this.body[name] && !value) {
delete this.body[name];
} else {
this.body[name] = { $in: value };
}
}
...これに:
private processType(name: string, value: any, body)
{
if (this.body[name] && !value || this.body[name] && value.length < 1) {
delete this.body[name];
} else if (value) {
this.body[name] = { $in: value };
}
}
これは基本的に、{$ in:value}がトリガーされたときに少なくとも1つの値の配列が使用可能であることを確認します。
必要な他の唯一の変更は、ユーザーがすべての値の選択を解除したときに放出されるものに関するものでした。私はそれを次のように処理しました:
private sendLangSelections(languageFilterOptions) {
const origLangArray = ['English', 'Spanish', 'Mandarin'];
if (languageFilterOptions)
{
let selectionsArray = this.languageFilterOptions.selection;
let values = selectionsArray.map((a) => { return a.value; });
if (values && values.length > 0)
{
this.sendLanguage.emit(values);
}
else if (values && values.length < 1)
{
this.sendLanguage.emit(this.obj = undefined);
}
}
}