javascript - Filtrera med piller/knappar istället för att använda en select - angular


Jag bygger med Angular och har använt ett filterrör för att filtrera på det valda alternativet från min dropdown i *ngFor-loopen. Innehållet filtreras då därefter. Jag vill byta ut valalternativen mot knappar eller piller. Så när en knapp klickas sker filtret - knappen kommer att fungera som en på/av-knapp så att du kan ha fler än ett alternativ filtrerat.

Här är mitt stackblitz-exempel - https://stackblitz.com/edit/timeline-angular-7-tyle1f

    <div class="form-group row">
      <div class="col-sm">
        <select class="form-control" name="locationFilter" id="locationFilter" [(ngModel)]="filteredLocation">
          <option value="All">All</option>
          <option *ngFor="let entry of timeLine | filterUnique" value="{{entry.location}}">{{entry.location}}
          </option>
        </select>
      </div>
//Button filters below
       <div ngDefaultControl [(ngModel)]="filteredLocation" name="locationFilter" id="locationFilter">
            <button class="btn btn-primary" type="button" *ngFor="let entry of timeLine | filterUnique">{{entry.location}}</button>
       </div>
    </div>

Jag är inte säker på hur man får knapparna att fungera på samma sätt eftersom ingen filtrering sker.... all hjälp uppskattas!?

Svar #1

Binda en klickhändelse (click)="filteredLocation=entry.location" till knappen

Prova så här:

 <div ngDefaultControl [(ngModel)]="filteredLocation" name="locationFilter" id="locationFilter">
     <button  (click)="filteredLocation = entry.location" class="btn btn-primary" type="button" *ngFor="let entry of timeLine | filterUnique">{{entry.location}}</button>
  </div>

Funktionerande Demo

Svar #2

Kärnan i detta är bara att tilldela värdet av knappen/omkopplaren till din filteredLocation-variabel som nedan

<button (click)="filteredLocation = entry.location" class="btn btn-primary" type="button" *ngFor="let entry of timeLine | filterUnique">{{entry.location}}</button>

Uppdaterad demo

Hoppas det här hjälper :)

Relaterade artiklar