代码之家  ›  专栏  ›  技术社区  ›  user244394

角度2/4。如何在单击复选框时禁用复选框几秒钟

  •  0
  • user244394  · 技术社区  · 7 年前

    我不熟悉Angular2/4和AngularTypeScript。当用户单击复选框进行服务器调用时,我想禁用所有复选框3秒钟。

    wiz.component.html

     <div class="table-header header-eligible">
          <div class="select-all">
            <md-checkbox name="chkSelectAll" [(ngModel)]="isSelectAll" (change)="onSelectAll()"></md-checkbox>
          </div>
          <div>Account Number</div>
          <div>Client Name</div>
          <div>Account Type</div>
          <div class="datatype-numeric">Long Market Value</div>
          <div class="datatype-numeric">Estimated Borrowing Power</div>
        </div>
        <div *ngFor="let e of eligibleArray; let i = index;" >
          <div class="table-content content-eligible">
            <div>
              <md-checkbox name="chkSelect{{i}}" [(ngModel)]="e.isSelected" (change)="onSelect(i)"></md-checkbox>
            </div>
            <div class="link" (click)="openAccountPopUp(i)">{{e.accountNumber}}</div>
            <div>{{e.clientName}}</div>
            <div>{{e.accountType}}</div>
            <div class="datatype-numeric">{{e.marketValue | currency:'USD':true}}</div>
            <div class="datatype-numeric">{{e.advanceAmount | currency:'USD':true}}</div>
          </div>
        </div>
    

    wiz.component.ts

         initSelected(): void {
            if( this.advisorClientModel.pledgedAccounts.length == 0 )
            {
              // Init first time from source array
              for( let e of this.eligibleArray )
              {
                // select all accounts by default, first time in
                e.isSelected = true;
              }
              this.isSelectAll = true;
            }
            else 
            {
              for( let e of this.eligibleArray )
              {
                if( this.advisorClientModel.pledgedAccounts.includes(e.accountNumber) )
                  e.isSelected = true;
              }      
              let selectedCount = this.advisorClientModel.pledgedAccounts.length;
              if( selectedCount == this.eligibleArray.length )
              {
                this.isSelectAll = true;
              }
            }
            this.updateSelectedTotals();
          }
     updateSelectedTotals(): void {
        this.invalidAccountsMessage = "";
        let marketTotal:number = 0;
        let advanceTotal:number = 0;
        for( let e of this.eligibleArray )
        {
          if( e.isSelected )
          {
            marketTotal = Number(marketTotal) + Number( e.marketValue);
            advanceTotal = Number(advanceTotal) + Number( e.advanceAmount);
          }
        }
        this.eligibleSelected.marketValue = marketTotal;
        this.eligibleSelected.advanceAmount = advanceTotal;
      }
    
      onChangeAmount(): void {
        // Apply Amount Format
        let sIn: string = this.loanAmountString;
        let sOut: string = this.inputMaskService.getFormatAmount(sIn);
        if( sIn != sOut )
        {
          // Only update model if format rules modified it
          this.loanAmountString = sOut;
        }
    
        sOut = sOut.replace(/\D/g,'');
        if( sOut.length > 0 )
        {
          let n: number = Number(sOut);
          if( n < 100000 ) {
            this.invalidAmountMessage = "Amount must be >= 100K";
            this.isValidAmount = false;
          }
          else if ( n > 10000000 ) {
            this.invalidAmountMessage = "Amount must be <= 10 Million";
            this.isValidAmount = false;
          }
          else 
          {
            this.loanAmount = n;
            this.isValidAmount = true;
          } 
        }
        else
        {
          this.isValidAmount = false;
        }
      }
    
      onChangeMax(): void {
        this.loanAmountString = "";
        this.loanAmount = 0;
        if( this.isMaximumAmount )
        {
          this.isValidAmount = true;
        }
        else
        {
          this.isValidAmount = false;
        }
      }
    
      onSelect(i:number): void {
        this.isSelectAll = ( this.numberOfSelectedAccounts() == this.eligibleArray.length );
        this.updateSelectedTotals();
      }
    
      onSelectAll(): void {
        for( let e of this.eligibleArray )
        {
           e.isSelected= this.isSelectAll;
        }
        this.updateSelectedTotals();
      }
    
    numberOfSelectedAccounts(): number {
        let selectedCount = 0;
        for( let e of this.eligibleArray )
        {
          if( e.isSelected ) selectedCount++;
        }
        return selectedCount;
      }
    
    2 回复  |  直到 7 年前
        1
  •  0
  •   Nehal    7 年前

    因为您正在使用 md-checkbox ,我们可以利用 disabled

    为复选框声明禁用标志,并在component.ts中添加超时函数。

    disableFlag = false;
    
    disableCheckBox(){
      this.disableFlag = true;
      setTimeout(() =>{
        this.disableFlag = false; 
              }, 3000);
    }
    

    并将其添加到 md-checbox change 事件:

    <md-checkbox name="chkSelectAll" 
                 [(ngModel)]="isSelectAll" 
                 (change)="onSelectAll(); disableCheckBox()"
                 [disabled]="disableFlag"></md-checkbox>
    
    
    <md-checkbox name="chkSelectAll" 
                 [(ngModel)]="isSelectAll" 
                 (change)="onSelectAll(); disableCheckBox()" 
                 [disabled]="disableFlag"></md-checkbox>
    

    Plunker example

        2
  •  0
  •   BogdanC    7 年前

    [disabled]="yourVariable" 在所有要禁用的复选框上,以及在实例化到的事件处理程序上 true yourVariable ,调用可观察的setTimeout,然后重新实例化“yourVariable”以 false .

    setTimeout here