-3

我正在尝试切换<li>列表中的活动类。我不想*ngFor用来显示<li>项目。我想设置 active(clicked) 的样式<li>

  <ul class="table-filter">
              <li><span (click)="Filter('')" >All Test Result</span></li>
              <li><span (click)="Filter('pass')" >Pass Test Result</span></li>
              <li><span (click)="Filter('fail')" >Fail Test Result</span></li>
              <li><span (click)="Filter('skip')" >Skipped Test Result</span></li>
          </ul>   

Filter(innerText:any) {
    this.dataSource.filter = innerText.trim().toLowerCase();  
  }
4

4 回答 4

0

模板

 <ul class="table-filter">
   <li><span (click)="toggleFilter('')" >All Test Result</span></li>
   <li><span [class.hidden]="hidden.pass" (click)="toggleFilter('pass')" >Pass Test Result</span></li>
   <li><span [class.hidden]="hidden.fail" (click)="toggleFilter('fail')" >Fail Test Result</span></li>
   <li><span [class.hidden]="hidden.skip" (click)="toggleFilter('skip')" >Skipped Test Result</span></li>
 </ul>

零件

hidden = {
  pass: false, fail: false, skip: false
}

toggleFilter(key:string) {
  if(!this.hidden.hasOwnProperty(key)) {
    this.hidden = {
      pass: false, fail: false, skip: false
    };
    return;
  }

  this.hidden[key] = !this.hidden[key];
}

样式表

.hidden { display: none }

工作演示:https ://stackblitz.com/edit/angular-52vcuj

于 2020-01-23T15:23:08.397 回答
0
<ul class="table-filter">
    <li (click)="isClicked = !isClicked" [ngClass]="isClicked? 'active' : ' '"><span (click)="applyFilter('')" >All Test Result</span></li>
    <li  [ngClass]="{'active':status.pass == true, ' ':status.pass == false}"><span (click)="applyFilter('pass')" >Pass Test Result</span></li>
    <li  [ngClass]="{'active':status.fail == true, ' ':status.fail == false}"><span (click)="applyFilter('fail')" >Fail Test Result</span></li>
    <li  [ngClass]="{'active':status.skip == true, ' ':status.skip == false}"><span (click)="applyFilter('skip')" >Skipped Test Result</span></li>
</ul>

status:object = {};
applyFilter(innerText:any) {
    this.dataSource.filter = innerText.trim().toLowerCase();  
    this.status = {
        pass: false, fail: false, skip: false
    };
    this.status[innerText] = true;
    this.isClicked = false;
}
于 2020-01-23T17:07:23.083 回答
0

您可以在模板中切换变量:

<ul class="table-filter">
     <li>
        <span (click)="Filter(''); isOk=!isOk" 
             [ngClass]="isOk? 'success' : 'danger'">All Test Result
        </span>
     </li>              
</ul>

或者在 TypeScript 中创建一个变量:

isOk: boolean = false;
clickEvent(){
    this.isOk = !this.isOk;       
}

HTML:

<ul class="table-filter">
    <li>
        <span (click)="Filter('')" 
              [ngClass]="isOk? 'success' : 'danger'">All Test Result
        </span>
    </li>              
</ul>
于 2020-01-23T15:11:34.887 回答
0
    <ul class="heroes">
      <li *ngFor="let hero of heroes"
        [class.selected]="hero === selectedHero"
        (click)="onSelect(hero)">
        <span class="badge">{{hero.id}}</span> {{hero.name}}
      </li>
    </ul>

export class AppComponent {
  title = 'Tour of Heroes';
  heroes = HEROES;
  selectedHero: Hero;
  onSelect(hero: Hero) { this.selectedHero = hero; }
}

来自角度文档:https ://angular.io/tutorial/toh-pt2#style-the-selected-hero

于 2020-01-23T15:15:00.123 回答