Angular:尝试在点击次数后禁用按钮

Angular: Trying to disable button after amount of clicks

我有一个简单的应用程序,其中包含 3 个东西:

  1. 我有一个1到20之间的随机数无限显示(间隔)

  2. 2 个向上和向下按钮,让我可以在每次高级点击 +1 或 -1 后更新数字

  3. 点击 20 次后应禁用按钮的功能(不起作用) (有breakDown功能)

我在服务中使用的一些功能,重要的是保留在那里

重要的是要注意我只需要第三部分的帮助(前两部分对我有用)

我的 stackblitz :

我的服务:

export class ElevatorService {

  floor = new BehaviorSubject<number>(1);
  floorNumber: number = -1;
  Count = 0;


  constructor() {
  }

  getRandomNumbers() {
    return interval(1000)
    .pipe(
      map(() => Math.floor(Math.random() * 20) + 1),
      tap(res => this.floorNumber = res));
  }

  breakDown(){
    this.Count++;
    if(this.Count >= 20)
    return false;
    return true;
}

我的component.ts:

 export class AppComponent {
  floor = new BehaviorSubject<number>(1);
  Count = 0;

  ngOnInit(): void {
    this.Count++;
    this.elevatorService.getRandomNumbers().subscribe(this.floor);
  }

  constructor(private elevatorService: ElevatorService) {}

  breakDown() {
    const breakDown = this.elevatorService.breakDown();
    return breakDown;
  }

  up() {
    this.floor
      .pipe(
        take(1),
        filter((v) => v < 20),
        map((v) => v + 1)
      )
      .subscribe((v) => this.floor.next(v));
  }

  down() {
    this.floor
      .pipe(
        take(1),
        filter((v) => v > 1),
        map((v) => v - 1)
      )
      .subscribe((v) => this.floor.next(v));
  }

我的component.html:breakDown函数是在up和down函数中disable的属性中调用的

<input type="button" value="Up" (click)="up()" [disabled]="breakDown()" />

<input type="button" value="Down" (click)="down()" [disabled]="breakDown()" />

<div class="elevator">
  <pre class="floor">{{ this.floor | async }}</pre>
</div>

我认为问题是,禁用的 属性 只被触发一次。尝试将 [disabled] 属性 绑定到一个变量并在每次点击时更新它。然后通过细分功能在每次点击时重新分配变量。 类似于:

伪代码:

    component.ts:
    upDisabled: boolean;

    up(){
      this.upDisabled = this.breakDown();
    }

    component.html:
    <input type="button" value="Up" (click)="up()" [disabled]="upDisabled" />

当然你也可以在这些函数中做其他的事情。

编辑: 请看@Havald 对这个问题的回答: “@NadavPall 看看这个 Stackblitz。在你的例子中你 return true 禁用按钮,如果值 <= 20 所以它在第一次点击时被禁用。”

我为您创建了一个代码演示,可在点击 5 次后禁用该按钮:link to the demo

请随时根据您的需要调整代码。