Фильтрация данных с помощью angular

Я новичок в angular и пытаюсь фильтровать данные. Я создал веб-страницу со списком отелей, но хотел бы отфильтровать их по их звездному рейтингу. Я не знаю, как даже попытаться это сделать. Любая помощь будет принята с благодарностью!

отели.component.ts :

import { Component } from '@angular/core';
import { WebService } from './web.service';



@Component({
  selector: 'hotels',
  templateUrl: './hotels.component.html',
  styleUrls: ['./hotels.component.css']
})
export class HotelsComponent {

    hotel_list: any;
    page: number = 1;

    constructor(public webService: WebService) { }

    ngOnInit() {
        if (sessionStorage['page']) {
          this.page = Number(sessionStorage['page'])
        }
        this.hotel_list = this.webService.getHotels(this.page);
    }
       

Веб-сервисы.ts:

import { HttpClient } from '@angular/common/http';
import { Injectable } from '@angular/core';


@Injectable()
export class WebService {

    private hotelID: any;


    constructor(private http: HttpClient) { }

    getHotels(page: number) { 
        return this.http.get('http://localhost:5000/api/v1.0/hotels?pn=' + page);

    }

отели.components.html:

<div class = "container">
    <div class = "row">
        <div class = "col-sm-12">
            <div *ngFor = "let hotel of hotel_list | async">
                <div class = "card text-white bg-primary mb-3" 
                     style  = "cursor : pointer"
                     [routerLink] = "['/hotels', hotel._id]">
                    <div class = "card-header">
                        {{ hotel.hotel }}
                    </div>
                    <div class = "card-body">
                        This hotel is based in
                        {{ hotel.city }}
                    </div>
                    <div class = "card-footer">
                        {{ hotel.rating }}
                        stars
                    </div>
                </div>
            </div>

Должны ли эти критерии фильтрации применяться на уровне пользовательского интерфейса или на уровне API? Поддерживает ли API запрос отелей по их рейтингу?

Ravikumar Rajendran 26.11.2022 15:21
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
0
1
88
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Предположим, что вам нужно отфильтровать хостелы на стороне клиента после получения отелей. То есть возвращались только отели для page = 1.

в hotels.component.ts :

filtered_hotels_list: any = []; //empty array
//......
    ngOnInit() {
        if (sessionStorage['page']) {
          this.page = Number(sessionStorage['page'])
        }
        this.webService.getHotels(this.page).subscribe(data => { 
                this.hotel_list = data
                this.filter();
        });
        
}
filter(rating:number = -1) { // rating = -1 shows all
     if (rating > -1) {
         this.filtered_hotels_list = this.hotel_list.filter((o:any) => o.rating == rating)
     } else this.filtered_hotels_list = this.hotel_list
 
}

в hotels.components.html:

<div *ngFor = "let hotel of filtered_hotel_list">

И реализуйте свой пользовательский интерфейс, чтобы добавить кнопку фильтра, которая вызывает функцию filter(5).

Спасибо, что вернулись! Я получаю сообщение об ошибке (o => o.rating == rating), говоря: «параметр o неявно имеет любой тип». Любая идея, как решить эту проблему?

Beth McCoy 26.11.2022 21:37

если у вас есть класс Hotel, используйте o: Hotel. В противном случае o: any должен это сделать.

Wen W 26.11.2022 21:43

this.filtered_hotels_list = this.hotel_list.filter((o: any) => o.rating == рейтинг)

Satsangpriyadas Swami 26.11.2022 21:45

Как бы я реализовал это в своем пользовательском интерфейсе? Вот что у меня есть на данный момент: <div class = "dropdown"> <div *ngFor = "let hotel of filtered_hotels_list"></div> <button type = "button" class = "btn btn-primary dropdown-toggle" data-toggle = "dropdown"> Dropdown button </button> <div class = "dropdown-menu"> <a class = "dropdown-item" href = "#">5 Star</a> <a class = "dropdown-item" href = "#">4 Star</a> <a class = "dropdown-item" href = "#">3 Star</a> <a class = "dropdown-item" href = "#">2 Star</a> <a class = "dropdown-item" href = "#">1 Star</a> </div> </div>

Beth McCoy 01.12.2022 10:43

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