Как переключать два деления при нажатии в цикле в angular4

Это ссылка на вопрос о том, как показать / скрыть динамический идентификатор div в angular2.

Я подготовил поршень, который покажет проблему, с которой я сталкиваюсь? здесь я хочу переключить btn1 и btn2 отдельно в 4 полях. Требование заключается в том, что в окне box1 btn1 нажимается, 'subRegion' должен показать & 'productLine' должен спрятаться; когда btn2 нажата,'productLine' должен показать и 'subRegion' должен спрятаться. Аналогично среди box2,box3,box4. Здесь, щелкнув btn2 из box1(один из 4 блоков), вы увидите содержимое каждого блока. Как это исправить?

Вот ссылка на плункер, https://plnkr.co/edit/E3ykbvXIPtQwVqe9cnQA?p=preview

код:-

@Component({
  selector: 'my-app',
  template: `
 <div class="col-xs-3 rmpm" *ngFor="let kpi of kpiName;let index=index;">
 <div class="col-xs-12 rmpm" style="height:80px;border:1px solid;width:70px;padding:0px;margin:0px;">A</div>
 <div class="col-xs-12 rmpm" style="border:1px solid;width:70px;margin-top:10px;padding:0px;margin:0px;">

  <div class="col-xs-12 rmpm" style="border:1px solid;padding:0px;margin:0px;">

   <!--btn 1 should be by default active and have blue color -->

  <div class="col-xs-6 rmpm" id="btn1{{index}}"  (click)="showsubid(index,'btn1')" style="padding:0px;margin:0px;border-right:1px solid;">btn1</div>
   <div class="col-xs-6 rmpm" id="btn2{{index}}" (click)="showproid(index,'btn2')"  style="padding:0px;margin:0px;">btn2</div>
  </div>

 <!--By default will be displayed when btn1 is active,this will show when btn1 is clicked and hide when btn2 is clicked -->

  <div class="col-xs-12" id="subid{{index}}" style="padding:0px;margin:0px;" >
     <div class="col-xs-12 rmpm filteredDataRow" *ngFor="let subDta of subRegion;let k = index;" style="padding:0px;margin:0px;">
     <div class=" col-xs-12 rmpm filteredDataName " (click)='loadSubRegionData()' style="padding:0px;margin:0px;border-top:1px solid">{{subRegion[k]}}</div>
 </div>
 </div>

 <!--this will show when btn2 is clicked and hide when btn1 is clicked -->

    <div class="col-xs-12"  id="proid{{index}}"   style="padding:0px;margin:0px;" *ngIf="pro == 0" >
     <div class="col-xs-12 rmpm filteredDataRow"  *ngFor="let subDta of productLine;let k = index;" style="padding:0px;margin:0px;" >
     <div class=" col-xs-12 rmpm filteredDataName " (click)='loadSubRegionData()' style="padding:0px;margin:0px;border-top:1px solid">{{productLine[k]}}</div>
 </div>
  </div>
</div>
</div>
  `,
})
export class App {
    kpiName = ['s', 'TO ','d','e'];
  subRegion = ['Ch', 'Ia', 'Ja', 'Ke', 'SE'];
   productLine = ['6A', '7T', '9T', 'UV', 'BA'];
pro: any;
  constructor() {

  }

showsubid(index,btnid){
  alert(index)
   alert(btnid+index)
}
showproid(index){
   alert(index)
    // alert(id+index)
    this.pro = index;
}
}

1 ответ

Решение

Согласно вашему запросу. При нажатии на кнопку должен отображаться конкретный контент этого раздела. Я обновил код: https://plnkr.co/edit/TEbI45K2TZkRYd84jYft?p=preview

    //our root app component
import {Component, NgModule} from '@angular/core'
import {BrowserModule} from '@angular/platform-browser'

@Component({
  selector: 'my-app',
  template: `
 <div class="col-xs-3 rmpm" *ngFor="let kpi of kpiName;let index=index;">
 <div class="col-xs-12 rmpm" style="height:80px;border:1px solid;width:70px;padding:0px;margin:0px;">A</div>
 <div class="col-xs-12 rmpm" style="border:1px solid;width:70px;margin-top:10px;padding:0px;margin:0px;">

  <div class="col-xs-12 rmpm" style="border:1px solid;padding:0px;margin:0px;">

   <!--btn 1 should be by default active and have blue color -->

  <div class="col-xs-6 rmpm" id="btn1{{index}}"  (click)="showsubid(index,'btn1')" style="padding:0px;margin:0px;border-right:1px solid;">btn1</div>
   <div class="col-xs-6 rmpm" id="btn2{{index}}" (click)="showproid(index,'btn2')"  style="padding:0px;margin:0px;">btn2</div>
  </div>

 <!--By default will be displayed when btn1 is active,this will show when btn1 is clicked and hide when btn2 is clicked -->

  <div class="col-xs-12" id="subid{{index}}" style="padding:0px;margin:0px;" >
     <div class="col-xs-12 rmpm filteredDataRow" *ngFor="let subDta of subRegion;let k = index;" style="padding:0px;margin:0px;">
     <div class=" col-xs-12 rmpm filteredDataName " (click)='loadSubRegionData(index ,kpiName[index],subRegion[k])' style="padding:0px;margin:0px;border-top:1px solid">{{subRegion[k]}}</div>
 </div>
 </div>

 <!--this will show when btn2 is clicked and hide when btn1 is clicked -->

    <div class="col-xs-12"  id="proid{{index}}"   style="padding:0px;margin:0px;" *ngIf="pro === index" >
     <div class="col-xs-12 rmpm filteredDataRow"  *ngFor="let subDta of productLine;let k = index;" style="padding:0px;margin:0px;" >
     <div class=" col-xs-12 rmpm filteredDataName " (click)='loadSubRegionData()' style="padding:0px;margin:0px;border-top:1px solid">{{productLine[k]}}</div>
 </div>
  </div>
</div>
</div>
  `,
})
export class App {
    kpiName = ['s', 'TO ','d','e'];
  subRegion = ['Ch', 'Ia', 'Ja', 'Ke', 'SE'];
   productLine = ['6A', '7T', '9T', 'UV', 'BA'];
pro: number;
  constructor() {
this.pro= [];
  }
loadSubRegionData(index,kpi,subreg){
  alert(index);
  alert(subreg);
}
showsubid(index,btnid){
  alert(index)
   alert(btnid+index)
}
showproid(index){
   alert(index)
    // alert(id+index)
    this.pro = index;
}
}

@NgModule({
  imports: [ BrowserModule ],
  declarations: [ App ],
  bootstrap: [ App ]
})
export class AppModule {}

Была небольшая ошибка, рассматривая переменную pro как логическое значение. Если вы рассматриваете его как число и сравниваете его с индексом, тогда он будет делать то, что вам нужно.

Другие вопросы по тегам