Javascript / Angular:超时包装在具有布尔值的函数中不起作用

时间:2019-02-23 16:42:30

标签: javascript angular timeout

在视图中,我处于这种情况:

    <h3 *ngIf="show">{{users.result}}</h3>

在TypeScript逻辑中,我有:

show=false; <----as a property

以及以下功能:

timeOut(seconds: number, value:boolean) {
   value = true;      
    setTimeout(
      function() {
        value = false;
      }.bind(this),
      seconds
    );
  }

但是当我打电话时,就像这样:

console.log(this.timeOut(3000, this.show));

“ this.show”属性未定义,但秒作为参数起作用了。我丢失了一些东西,我不知道该怎么办...有人可以帮忙吗?

1 个答案:

答案 0 :(得分:3)

我看到的是

  • 首先,您控制台记录 功能呼叫没有结果
  • 布尔值传递给函数参数时,它会被复制,因此,当您更改时,函数内部的值,不影响外部变量/字段。
  • 这是一个非常专业的用例,因此您无需将其提取到其他功能。

我的建议-只需将带有 arrow函数 setTimeout 调用放入某些组件的方法中,例如 ngAfterViewInit 或在事件处理程序方法中

ngAfterViewInit() {
   setTimeout(() => this.show = true, 3000)
}

希望有帮助。