angularform-fields

How to disable multiple textboxes in angular 2


I have 'n' number of rows which has textbox and select box. I am trying to disable a textbox when i change the value of a select box in the same row using angular 2.

My code is below:

<table>
  <tr>
    <td><input type="text" (disabled)="isDisabled(data.rowIndex)"</td>
    <td> <select (onValueChanged)="test(data.rowIndex)">
           <option>Yes</option>
           <option>No</option>
    </td>
   </tr>
   <tr>
    <td><input type="text" (disabled)="isDisabled(data.rowIndex)"</td>
    <td> <select (onValueChanged)="test(data.rowIndex)">
           <option>Yes</option>
           <option>No</option>
    </td>
   </tr>
   .
   .
   .
</table>

component.ts

tabNumber: number = -1;

test(valueID){
        this.tabNumber = valueID;
}

isDisabled(num){
        return this.tabNumber === num;
    }

This above line disables only one textbox which i selected recently and enables other textboxes. Thus, my code could enable/disable only one textbox at a time. But i want to disable multiple boxes based on my selection. can anybody help?


Solution

  • see it in action on : plunker

    html :

    <table>
       <tr *ngFor="let item of items; let i = index">
        <td><input type="text" [disabled]="isDisabled(i)"/></td>
        <td> <select (change)="toggle($event,i)">
               <option value="yes">Yes</option>
               <option value="no">No</option>
              </select>
        </td>
       </tr>
    
    </table>
    

    component:

    export class AppComponent {
       items = [{value : "hi"},{value : "hi"},{value : "hi"},{value : "hi"}]
       rows: number[] = [];
    
      isDisabled(index) {
        return this.rows[index] === -1;
      }
    
      enable(index){
        this.rows[index] = 1;
      }
    
      toggle($event,index){
        let selectElement = $event.target; 
        let value = selectElement.options[selectElement.selectedIndex].value;
        if(value === "yes"){
           this.enable(index);
        }else{
           this.disable(index);
        }
      }
    
      disable(index){
        this.rows[index] = -1;
      }
    }