当前位置: 首页 > 知识库问答 >
问题:

为什么我得到了未定义的变量?

陈渊
2023-03-14

我有财产课:

public requestLoadPersonal: Personal[] = [];

还有一种方法:

private filterByGender(selectedValue: any): void {
    console.log(this.requestLoadPersonal);
    this.requestLoadPersonal = this.requestLoadPersonal.filter(
      (p: Personal) => {
        return selectedValue ? p.gender == selectedValue : true;
      }
    );
  }

在类的构造函数我有:

 public filterFn = {
    name: this.filterByGender
 }

为什么当我从objectfilterFn按键调用函数this.filterByGender时。我收到一条未定义的消息,为什么变量this.requestLoadPersonal在内部不可用:

console.log(this.requestLoadPersonal)

调用为:

 this.filterFn['name']({...});

我尝试绑定变量:

 this.filterFn['name']({...}).bind(this.requestLoadPersonal);

共有1个答案

弓磊
2023-03-14

在您的构造函数中,您应该将函数绑定到this,如下所示:

constructor() { this.filterFn = { name: this.filterByName.bind(this) }; }

因为仅仅{name:this.filterByName}会丢失this上下文,即filterByName具有其他实例的this上下文。

然而,我建议你简化一切,让它更直截了当。目前它很复杂,因此容易出错。

 类似资料:
  • 我试图创建一个名为的状态变量作为字典(例如:)。隐藏可以是空的。 在我的一个方法中,我想将一个项目推送到隐藏状态变量并将它们相加。 我一直在提示这个错误: 类型'String[]|未定义'不是数组类型。 我是typescript新手,我不确定我是否正确设置了所有变量。这是我的代码(仅相关部分): 新代码: 这就是错误: 键入“(字符串|{dict:Map

  • 我有以下html: 我试图获得如下范围: 但我收到:。 我是angularJS初学者,我只是不明白为什么这不起作用。 更新:这也不起作用: 更新2:我试图在控制台中打印出作用域的所有代码:

  • 问题内容: public class Category { 在正在生成。 问题答案: 当您执行时,您称呼孩子们的。这里没有问题,只不过您在这里调用了父对象。这将称呼孩子,等等。 不错的无限循环。 摆脱它的最好方法是将您的方法更改为: 这样,您将不打印parentCategory,而仅显示其名称,不显示无限循环,不显示StackOverflowError。 编辑: 正如博洛在下面说的那样,您将需要检

  • 问题内容: 我试图制作一个延迟X毫秒执行异步函数的函数。 为了演示的目的,以下是异步函数,该函数采用URL: 目的 我在这里的目标是要有一个函数,它将接受X 的参数,然后每隔X ms调用一次,直到不再有其他参数为止。 基本上,我希望每次调用都用X ms分隔。 例如,假设我连续打电话20次。通常,这20个呼叫将立即进行。我想要的是确保20个呼叫之间都存在Xms的延迟。 暂定 解决这个问题的想法是建立

  • 问题内容: 我一直在跟随一个教程,教科书向我保证这可以工作,但是 错误:[ng:areq]参数’SimpleController’不是一个函数,未定义 为什么?我掉毛了,在它上面上下移动,看不到问题。为什么出现未定义状态? 问题答案: 我的猜测是您使用的angular.js版本是更新的。 有一个重大变化,即: 默认情况下 , angular将不再寻找控制器。有关更多详细信息,请参见3f2232b5

  • 请问为什么第13行的错误是未报告的异常,必须捕获pr声明要抛出