我制作了一个过滤器函数,其中过滤器应用于列表中的元素,当我在页面上单击使用它时,该函数起作用,如下所示

<button (click)="FilterFn5()"> do </button>

但当我将函数放在ngOnInit上时,它不起作用. 我的ngOnInit如下所示:

  ngOnInit(): void {
this.BuildingNameFilter="B"
this.BuildingRoomsFilter="2"
this.BuildingFloorFilter="0"
this.refreshBldList();
this.FilterFn5();

}

其功能是:

    FilterFn5(){

  var BuildingNameFilter = this.BuildingNameFilter;
  var BuildingFloorFilter = this.BuildingFloorFilter;
  var BuildingRoomsFilter = this.BuildingRoomsFilter;

  this.BuildingList = this.BuildingListWithoutFilter.filter( (el: 
    { BuildingId:
    { toString: () => string; }; BuildingFloor: { toString: () => string; }; 
    BuildingName: { toString: () => string; }
    ApartmentRooms: { toString: () => string; };  }) =>{
     

    return el.ApartmentRooms.toString().toLowerCase().includes(
      BuildingRoomsFilter.toString().trim().toLowerCase()
      
    )
    && el.BuildingFloor.toString().toLowerCase().includes(
      BuildingFloorFilter.toString().trim().toLowerCase()
    )&&
      el.BuildingName.toString().toLowerCase().includes(
        BuildingNameFilter.toString().trim().toLowerCase()
      ) 
  });

}

过滤后的列表是BuildingList,函数this.refreshBldList();是该列表获取元素的位置

  refreshBldList(){
this.service.getBuildingList().subscribe(data=>{
  this.BuildingList=data;
  this.BuildingListWithoutFilter=data;
});

}

推荐答案

这是因为您的服务GET操作中的Async语句.

基本上,您try 在调用服务检索数据后立即调用FilterFn5().但是当您执行FilterFn5函数时,您的数据可能还没有准备好.

我建议通过以下方式调整您的刷新功能:

ngOnInit(): void {
this.BuildingNameFilter="B"
this.BuildingRoomsFilter="2"
this.BuildingFloorFilter="0"
this.refreshBldList();
// this.FilterFn5(); <-- remove this line
}

// ...

refreshBldList(){
this.service.getBuildingList().subscribe(data=>{
  this.BuildingList=data;
  this.BuildingListWithoutFilter=data;
  this.FilterFn5(); // <-- add this line
});
}

您还可以禁用您的HTML模板中的按钮,直到您从您的服务中获得数据:

<button [disabled]="!BuildingListWithoutFilter" (click)="FilterFn5()"> do </button>

Typescript相关问答推荐

如何用不同的键值初始化角react 形式

使用React处理Websocket数据

如果存在ts—mock—imports,我们是否需要typescpt中的IoC容器

类型{...}的TypeScript参数不能赋给类型为never的参数''

如何正确地对类型脚本泛型进行限制

Next.js错误:不变:页面未生成

匿名静态类推断组成不正确推断

我可以以这样一种方式键入对象,只允许它的键作为它的值吗?

TypeScrip省略了类型参数,仅当传递另一个前面的类型参数时才采用默认类型

将带点的对象键重新映射为具有保留值类型的嵌套对象

TypeScrip泛型类未提供预期的类型错误

正交摄影机正在将渲染的场景切成两半

从子类集合实例化类,同时保持对Typescript中静态成员的访问

@TANSTACK/REACT-QUERY中发生Mutations 后的数据刷新问题

如何使函数参数数组不相交?

我可以将一个类型数组映射到TypeScrip中的另一个类型数组吗?

Svelte+EsBuild+Deno-未捕获类型错误:无法读取未定义的属性(读取';$$';)

如何按成员资格排除或 Select 元组?

如何在故事书的Typescript 中编写decorator ?

如何最好地打破Typescript 尾部递归数量的限制?