Angular 管道长度结果
Angular pipe length result
我正在使用管道,因此我可以按给定的 属性 过滤数组。假设它是一个 id。
<div #objs *ngFor="let obj of (arrayOfObj | pipe : search)">
...
</div>
我还向包含数组的元素添加了一个 ViewChildren。
@ViewChildren("objs") objs;
这是控制管道的输入:
<input type="text" [(ngModel)]="search" (ngModelChange)="inputSearch()">
这个inputSearch()
函数应该简单地控制一个数字变量,每次输入值改变时过滤数组的长度:
inputSearch(){
this.lengthFilteredArray = this.objs.length;
console.log(this.objs);
}
此外,如果我记录 objs
它包含一个奇怪的结果,它有两种不同的长度(我需要第二个结果,即 0):log result
下面是管道的transform()
:
transform(array: Array<any>, search: string)
{
if (!array|| !search) {
return array;
}
return array.filter(o =>
o.name.toLowerCase().indexOf(search.toLowerCase()) !== -1);
}
通过这种方法,我得到了一个“延迟”的结果。当我键入一个字符时,只有在我键入下一个字符后,我才能收到所需的结果。示例:我键入“x”,lengthFilteredArray
为 4,但数组被过滤为 0。如果我删除“x”,lengthFilteredArray
为 0,甚至没有过滤数组。
我不知道这是否是解决此问题的最佳方法。
问题是您正在检查“search
变量”中 ngModelChange
的长度,到那时 this.objs
尚未完成处理或管道尚未返回过滤操作数据。
当管道返回过滤数据(这里没有事件)或当 ngFor 处理完数据(在 [=14 中有事件)时,你必须检查结果=])
export class AppComponent implements AfterViewInit {
@ViewChildren('objs') objs: QueryList<any>;
ngAfterViewInit(): void {
this.objs.changes.subscribe((obj) => this.log(obj));
}
log = (q) => console.log(q); // in your case check q.length here not on search change
}
我正在使用管道,因此我可以按给定的 属性 过滤数组。假设它是一个 id。
<div #objs *ngFor="let obj of (arrayOfObj | pipe : search)">
...
</div>
我还向包含数组的元素添加了一个 ViewChildren。
@ViewChildren("objs") objs;
这是控制管道的输入:
<input type="text" [(ngModel)]="search" (ngModelChange)="inputSearch()">
这个inputSearch()
函数应该简单地控制一个数字变量,每次输入值改变时过滤数组的长度:
inputSearch(){
this.lengthFilteredArray = this.objs.length;
console.log(this.objs);
}
此外,如果我记录 objs
它包含一个奇怪的结果,它有两种不同的长度(我需要第二个结果,即 0):log result
下面是管道的transform()
:
transform(array: Array<any>, search: string)
{
if (!array|| !search) {
return array;
}
return array.filter(o =>
o.name.toLowerCase().indexOf(search.toLowerCase()) !== -1);
}
通过这种方法,我得到了一个“延迟”的结果。当我键入一个字符时,只有在我键入下一个字符后,我才能收到所需的结果。示例:我键入“x”,lengthFilteredArray
为 4,但数组被过滤为 0。如果我删除“x”,lengthFilteredArray
为 0,甚至没有过滤数组。
我不知道这是否是解决此问题的最佳方法。
问题是您正在检查“search
变量”中 ngModelChange
的长度,到那时 this.objs
尚未完成处理或管道尚未返回过滤操作数据。
当管道返回过滤数据(这里没有事件)或当 ngFor 处理完数据(在 [=14 中有事件)时,你必须检查结果=])
export class AppComponent implements AfterViewInit {
@ViewChildren('objs') objs: QueryList<any>;
ngAfterViewInit(): void {
this.objs.changes.subscribe((obj) => this.log(obj));
}
log = (q) => console.log(q); // in your case check q.length here not on search change
}