按布尔值筛选 angular
Filter by boolean value angular
我正在尝试按用户状态进行过滤,“Ativo”表示在线,“Inativo”表示离线,但是按字符串过滤让我有些头疼,因为当我输入“ativo”时,所有离线用户仍然出现,因为“ativo”这个词存在于“inativo”中。所以我想给 'inativo' 附加一个假值,给 'ativo' 附加一个真值。
关于我该怎么做的任何提示? I still what the filter to show "Ativo" and "Inativo" as the options in the datalist, but when selected it should send a true or false value to the filter function
这是 html 和我在 ts 上创建的函数
<input type="text" list="status" placeholder="Status" (keyup)="updateFilter($event)" id="stat">
<datalist id="status">
<option>Ativo</option>
<option>Inativo</option>
</datalist>
updateFilter(event: Event) {
this.filterValue = (event.target as HTMLInputElement).value;
this.dataSource.filter = this.filterValue.trim().toLowerCase();
console.log(this.dataSource.filter);
if (this.dataSource.paginator) {
this.dataSource.paginator.firstPage();
}
}
Angular Material 提供了一种方式来说明如何通过 filterPredicate 方法将过滤器应用于数据:https://material.angular.io/components/table/api#MatTableDataSource
为您的数据源提供一个箭头函数,说明值应该严格相等而不是相同应该可以解决您的问题。
this.datasource.filterPredicate = (data: YourDataType, filter: string) => {
return data.status === filter;
};
首先,如果您的过滤器具有严格的值,则不应使用数据列表,而应使用 select
。它的工作原理相同,但不允许用户输入。
现在,您没有理由遇到这种问题。只需检查 (event.target as HTMLInputElement).value === 'ativo'
是否足够。
我建议创建一个枚举以避免代码中出现魔术字符串,因此您将使用 UserStatus.ativo
.
而不是 'ativo'
您可以使用正则表达式来做到这一点:
var myString = 'ativio';
var myString2 = 'inativio';
new RegExp('\bativio\b').test(myString); // true
new RegExp('\bativio\b').test(myString2); // false
我正在尝试按用户状态进行过滤,“Ativo”表示在线,“Inativo”表示离线,但是按字符串过滤让我有些头疼,因为当我输入“ativo”时,所有离线用户仍然出现,因为“ativo”这个词存在于“inativo”中。所以我想给 'inativo' 附加一个假值,给 'ativo' 附加一个真值。
关于我该怎么做的任何提示? I still what the filter to show "Ativo" and "Inativo" as the options in the datalist, but when selected it should send a true or false value to the filter function
这是 html 和我在 ts 上创建的函数
<input type="text" list="status" placeholder="Status" (keyup)="updateFilter($event)" id="stat">
<datalist id="status">
<option>Ativo</option>
<option>Inativo</option>
</datalist>
updateFilter(event: Event) {
this.filterValue = (event.target as HTMLInputElement).value;
this.dataSource.filter = this.filterValue.trim().toLowerCase();
console.log(this.dataSource.filter);
if (this.dataSource.paginator) {
this.dataSource.paginator.firstPage();
}
}
Angular Material 提供了一种方式来说明如何通过 filterPredicate 方法将过滤器应用于数据:https://material.angular.io/components/table/api#MatTableDataSource
为您的数据源提供一个箭头函数,说明值应该严格相等而不是相同应该可以解决您的问题。
this.datasource.filterPredicate = (data: YourDataType, filter: string) => {
return data.status === filter;
};
首先,如果您的过滤器具有严格的值,则不应使用数据列表,而应使用 select
。它的工作原理相同,但不允许用户输入。
现在,您没有理由遇到这种问题。只需检查 (event.target as HTMLInputElement).value === 'ativo'
是否足够。
我建议创建一个枚举以避免代码中出现魔术字符串,因此您将使用 UserStatus.ativo
.
'ativo'
您可以使用正则表达式来做到这一点:
var myString = 'ativio';
var myString2 = 'inativio';
new RegExp('\bativio\b').test(myString); // true
new RegExp('\bativio\b').test(myString2); // false