在没有这个函数的情况下调用函数时打字这个范围问题

时间:2018-03-06 07:41:57

标签: angular typescript

我正在尝试创建一个函数包装器,以禁用我的按钮点击。我希望这个功能是通用的。这是我的禁用功能:

  disable = (event, fn) => {
    let disabled = false;
    return (...args) => {
      if (!disabled) {
        disabled = true;
        const target = event.target || event.srcElement || event.currentTarget;
        target.disabled = disabled;
        fn(...args);
      }
    };
  }

我可以像这样从我的按钮调用禁用:

<button (click)="disable($event, login)('hello')">Sign in</button>

问题是当调用fn()时,这不再是范围内的了。我知道我想在这里混合一些不同的fn和oop。我可以以某种方式通过这个或使其成为范围的一部分吗?

我希望这是可能的,因为我很乐意使用这种模式!

我可以在不将其作为参数添加的情况下完成吗?

disable = (event, fn) => {
    let disabled = false;
    return (...args) => {
      if (!disabled) {
        disabled = true;
        const target = event.target || event.srcElement || event.currentTarget;
        target.disabled = disabled;
        fn(this, ...args);
      }
    };
  }

以上是一个糟糕的解决方案,因为禁用功能不在组件中。

1 个答案:

答案 0 :(得分:2)

您可以使用fn.apply(this,...)。