如何在 Angular 2 中过滤具有多个复选框的范围滑块的结果?

2024-04-10

我正在尝试过滤给定数组“db”的结果,有三个过滤器: 价格、持续时间和类别。

我尝试使用 filter() 方法来过滤结果。

这是我尝试过的代码链接:https://stackblitz.com/edit/multiple-filters?file=app%2Fapp.component.ts https://stackblitz.com/edit/multiple-filters?file=app%2Fapp.component.ts

组件.html

<div class="filters">
  <div id="price">
  <h3>Price: {{rangeValues[0] + ' - ' + rangeValues[1]}}</h3>
  <p-slider [(ngModel)]="rangeValues" (click)="handleChange()" [min]="0" 
  [max]="2000" [style]="{'width':'14em'}" [range]="true"></p-slider>
</div>
<hr>
<div id="duration">
    <h3>Duration</h3>
    <li><input type="checkbox" (click)="checkFilter('2 days')"> 2 Days</li>
    <li><input type="checkbox" (click)="checkFilter('6 days')">6 Days</li>
</div>
<hr>
<div id="Theme">
    <h3>Theme</h3>
    <li><input type="checkbox" id="Wild Life" (click)="filterTheme('Wild Life')">Wild Life</li>
    <li><input type="checkbox" id="Romance" (click)="filterTheme('Romance')">Romance</li>
    <li><input type="checkbox" id="Food & Drink" (click)="filterTheme('Food & Drink')">Food & Drink</li>
    <li><input type="checkbox" id="Adventure" (click)="filterTheme('Adventure')">Adventure</li>
 </div>
 <hr>
 </div>

 <div class="results">
    <h3>Results</h3>

    <div *ngFor="let p of package">
    <p>{{p.product_name}}</p>
    </div>
 </div>

组件.ts

@Component({
  selector: 'my-app',
  templateUrl: './app.component.html',
  styleUrls: [ './app.component.css' ]
})
export class AppComponent implements OnInit {
 db=[
{
  "id":"1",
  "product_name":"6 Days at Karnataka",
  "price":324,
  "duration":"6 days",
  "category":["Romance"]
},
{
  "id":"5",
  "product_name":"2 Days at Thailand",
  "price":234,
  "duration":"2 days",
  "category":["Romance","Wild Life"]
},
{
  "id":"8",
  "product_name":"2 Days at Delhi",
  "price":1400,
  "duration":"2 days",
  "category": ["Romance","Food & Drink","Adventure"],
}
];
rangeValues: number[] = [0,2000];
package:any;
filterData=[];


ngOnInit(){
  this.packageList();
}

packageList(){
 for(let i = 0; i < this.db.length; i++){
  this.filterData.push(this.db[i]);
  this.package =this.filterData;
 }    
}

handleChange() {
        for(let i = 0; i < this.filterData.length; i++){             
          this.package= this.filterData.filter(item => item.price >=this.rangeValues[0] && item.price <=this.rangeValues[1]);
   }
}

checkFilter(id){ 
    if(id.checked==true){
      for(let i = 0; i < this.filterData.length; i++){
         this.filterData= this.filterData.filter(item => item.duration !== id && item.price >=this.rangeValues[0] && item.price <=this.rangeValues[1]);
          this.package=this.filterData;
      }
    }
    else {
      for(let i = 0; i < this.filterData.length; i++){
          this.filterData= this.filterData.filter(item => item.duration == id && item.price >=this.rangeValues[0] && item.price <=this.rangeValues[1]);
          this.package=this.filterData;
      }
    }
 }


filterTheme(id){
    let b=(<HTMLInputElement>document.getElementById(id));
    if(b.checked==true){
      for(let i = 0; i < this.filterData.length; i++){
        for(let j=0;j< this.filterData[i].category.length; j++){
          if(this.filterData[i].category[j]==id &&  this.filterData[i].price >=this.rangeValues[0] &&  this.filterData[i].price <=this.rangeValues[1]){

            this.package= this.filterData.filter(item => item.category[j]==id && item.price >=this.rangeValues[0] && item.price <=this.rangeValues[1]);
          }
        }
      }
    }else {
      for(let i = 0; i < this.filterData.length; i++){
        for(let j=0;j<this.filterData[i].category.length; j++){
          if(this.filterData[i].category[j]!==id && this.filterData[i].price >=this.rangeValues[0] && this.filterData[i].price <=this.rangeValues[1]){
            this.package = this.filterData.filter(item => item.category[j]!== id && item.price >=this.rangeValues[0] && item.price <=this.rangeValues[1]);

          }
        }
      }
    }

 }

}

我想要实现的目标:

  1. 价格过滤器:我使用范围滑块来过滤结果,它可以正确过滤价格,但它也应该过滤所选持续时间和类别的结果。

  2. 持续时间过滤器:使用复选框来过滤结果,这应该过滤给定价格和所选类别的结果。

  3. 类别过滤器:一个产品名称可以有一个或多个类别,并且它应该过滤所选类别和所选价格的结果。


好吧,你通过循环并检查它来使事情变得复杂,你可以有一个函数来为你完成这项工作。

step1:拿3个模型

rangeValues: number[] = [0, 2000];
  durations: any = [];
  themes: any = [];

step2:在这些模型中分配用户的值

  handleChange() {
    this.ApplyFilters();
  }

  checkFilter(id) {
    if (this.durations.some(a => a === id)) {
      this.durations = this.durations.filter(a => a !== id)
    } else {
      this.durations.push(id)
    }
    this.ApplyFilters();
  }


  filterTheme(id) {
    if (this.themes.some(a => a === id)) {
      this.themes = this.themes.filter(a => a !== id)
    } else {
      this.themes.push(id)
    }
    this.ApplyFilters();
  }

step3:创建一个通用过滤器

  ApplyFilters() {
    this.package = this.filterData.filter(item => {
      return (item.price >= this.rangeValues[0] && item.price <= this.rangeValues[1]) && (this.durations.some(b => b === item.duration) || this.durations.length === 0) && (item.category.every(c => this.themes.some(d => d === c)) || this.themes.length === 0)
    });
  }

你完成了

这里是demo https://stackblitz.com/edit/multiple-filters-kfykcy

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Angular 2 中过滤具有多个复选框的范围滑块的结果? 的相关文章

  • 仅单击 div 内部

    我正在为一个小网站制作教程 我只想让教程气泡可点击 因此 当我们尝试单击气泡之外的某些内容时 什么也不会发生 换句话说 我希望我的 html 不可点击 而 tutorial bubble 可点击 尝试这个 jQuery function h
  • 如何防止 gulp-notify 破坏 Windows 中的 gulp-watch?

    我正在使用吞咽通知 https www npmjs org package gulp notify插入 这是我如何在 gulpfile js 中实现它的示例 您可以看到我也在使用 gutil 和 livereload 我不知道它们是否发挥任
  • window.onbeforeunload 在 Android Chrome 上不会触发 [alt.解决方案?]

    我开发了一个简单的聊天应用程序 我正在使用 window onbeforeunload当有人关闭选项卡 浏览器时 基本上是当用户离开房间时 通知其他用户 这是我的代码 scope onExit function scope chatstat
  • 以一定时间间隔连续重复运行 JavaScript 函数

    这是我的第一个问题 希望您尽快回答 我想要代码连续重复一个函数 我尝试了一些代码 但没有成功 我尝试了这段代码 我想在一段时间后重复这个功能 我努力了setInterval and setTimeout 但是 我还没有收到结果 这将重复该任
  • Web 组件 - 服务/非 html 组件

    所以我来自 Angular 想看看如何创建vanilla Web components 现在 从 Angular 开始 我们倾向于将事物分开 组件 充当 HTML CSS 和一些 javascript 然后是 服务 主要负责收集数据和执行不
  • 如何动态突出显示网页上的字符串?

    我想创建带有 url 的页面 例如 http xyzcorp schedules 2015Aug24 Aug28 Jim Hawkins http xyzcorp schedules 2015Aug24 Aug28 Billy Bones
  • 搜索深度嵌套数组以更新对象

    我有一个深层嵌套的数据结构 我有兴趣匹配数组 和数组数组 中的某个值 然后将一些数据推送到随附的数组中 例如以下是我的数组colors并伴随着的是更多颜色数组可能存在也可能不存在 var myData color green moreCol
  • 判断一个数字是否能被 3 或 5 整除 (FizzBu​​zz)

    如何根据输出是否能被 3 或 5 整除来更改输出 如果它能被 3 整除 我想显示 rock 如果它能被 5 整除 我想显示 star 类似于 FizzBu zz 如果两者都有 他们都会看到 这是我的代码 if var n Math floo
  • 为什么 Web Worker 性能在 30 秒后急剧下降?

    我正在尝试提高在网络工作人员中执行时脚本的性能 它旨在解析浏览器中的大型文本文件而不会崩溃 一切都运行得很好 但我注意到使用网络工作者时大文件的性能存在严重差异 于是我做了一个简单的实验 我在同一输入上运行脚本两次 第一次运行在页面的主线程
  • 为什么将 x 和 y 设置为 0 时 svg 文本会消失?

    我刚刚开始阅读有关svg我提出了以下问题 我正在创建一个简单的svg with a text里面如下图所示 从我的阅读中我了解到x and y of the text标签声明文本在标签内的位置svg space 为什么当我同时设置x and
  • 如何使用 vanilla JS 实现可维护的反应式 UI

    今天我遇到了一个问题 可以通过使用像 Vue 这样的反应式和状态管理框架来轻松解决 遗憾的是 无法使用它 以下 简化 情况 链接到代码笔 https codepen io theiaz pen BazErKV 我们有一个服务器渲染的页面 其
  • 如何在 Angular 项目中使用 Bootstrap?

    我开始我的第一次Angular应用程序和我的基本设置已完成 我怎样才能添加引导程序我的申请 如果您可以提供一个示例 那么这将是一个很大的帮助 如果您使用Angular CLI要生成新项目 还有另一种方法可以使 bootstrap 可访问角度
  • 获取点击的的DOM路径

    HTML div class lol a class rightArrow href a div 伪代码 rightArrow click function rightArrowParents this dom dom is the pse
  • 使用日期字符串数组在引导日期选择器中设置禁用月份不起作用

    我有一个日期选择器 其配置如下 HTML div class input group date div
  • Node.js 未处理的“错误”事件

    我编写了一个简单的代码并将其保存在文件 try js 中 var http require http var makeRequest function message var options host localhost port 8080
  • mozilla pdf.js 没有全视图

    我喜欢这个 pdf 查看器https github com mozilla pdf js https github com mozilla pdf js Demo http mozilla github com pdf js web vie
  • Node.js - 重载函数

    有没有一种方法可以重载node js中的函数 类似于 noSuchMethod https developer mozilla org en JavaScript Reference Global Objects Object noSuch
  • Flowtype 属性“msg”缺失为 null 或未定义

    我发现 Flow 很难用 我明白那个Array find可以返回或未定义 因此 通过阅读以下内容 github Array find on Array 引发 https github com facebook flow issues 351
  • Angular Libraries Monorepo:是否可以为每个库使用不同的版本?

    只是一个简单的问题 我似乎找不到答案 我正在尝试构建一个应该能够使用 angular cli v8 的 monorepo 但仍然能够编译和构建为 v2 v3 v4 等制作的库 主要是组件和服务 版本之间发生了很多变化 所以让我们举个例子 V
  • 从输入类型编号获取无效值

    我正在使用输入类型数字 当它无效时 我如何从中获取值 例如 使用类型编号并仅打印 e 这本身是无效的 我正在使用 React 但我认为这个问题非常普遍 onChange event console log event target valu

随机推荐

  • 如何向下旋转 pandas 数据框中每一行的行值? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我的数据框 Name Percent Subject1 Subject2 ramesh 85 Maths Science ram 42
  • 如何在 Jar 文件中获取 Unicode

    我编写了一个从程序外部调用 Unicode 的程序 我使用的是 Windows XP 和 Eclipse 当我在 IDE 中运行该程序时 它显示 Unicode 但是当我将其导出为 jar 文件时 我无法读取 Unicode 它显示为方框
  • Google 计算引擎负载平衡无法正确路由

    我是 Google 计算引擎的新手 我尝试设置网络负载平衡 拥有 2 个虚拟机来提供网页服务 例如 我有 2 个虚拟机 app1 和 app2 都有 apache 服务器并提供简单的网页 两个虚拟机都运行 Red Hat Enterpris
  • 绑定参数太多。提供了 5 个参数,但该语句需要 4 个参数

    执行下面的函数时 我得到上面的 IllegalArgumentException 我不明白的是 当我运行调试器时 values变量显然只包含 4 个参数 正如它应该的那样 So 1 这个神秘的第五个论点从何而来 2 我应该如何发现这个错误
  • C# 屏幕截图全窗口

    我正在尝试使用 NET Framework 编写一个控制台应用程序 我想截图我的屏幕 我已经使用过其他答案 如下所示 https stackoverflow com a 24879511 9457997 https stackoverflo
  • 在 32 位和 64 位 C# 世界中使用 System.Data.SQLite 的选项

    我了解为什么在 32 位和 64 位版本中提供 System Data SQLite dll 因此 我们不要纠缠于此 继续前进 由于采用这种方式 纯 C 开发似乎变得更加困难 需要做出 3 个选择 是只支持32位并强制有托管 编译 x86
  • jQuery - 如何编写“如果不等于”(与 == 相反)

    我需要反转以下代码 如果宽度不是 500px 如何使动画运行 image div not this each function if this css width 500px this animate width 250px 500 fun
  • 查询以比较带时间的日期和不带时间的日期 - python 使用 access db

    我需要帮助来创建查询来比较带时间的日期和不带时间的日期 我正在使用带有 access db pypyodbc 的 python 在数据库中 我有一个包含日期 时间 包括时间 的列 在Python中 我有一个日期时间对象 没有时间 我想编写一
  • 为页面创建 Like-Gate [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我已经创建了一个 Facebook 页面 我想为其添加一个所谓的 Like Gate 问题是该页面带有时间线 并且到目前为止我找到的每个教
  • Conda无法激活环境

    Microsoft Windows Version 6 1 7601 Copyright c 2009 Microsoft Corporation All rights reserved C Users gt conda env list
  • 具有多个鉴别器值的 Hibernate 子类

    您好 我有一个子类需要覆盖多个鉴别器值 就像是 DiscriminatorValue 值 ACT DNR ATT 会让我变得完美 我们有现有的数据 其中多个鉴别器可以映射到一个类 因为它们与我们的系统将视为同一事物的类型相似 您可以使用判别
  • jQuery 淡入/淡出 div 到不同的 div?

    当您单击链接或按钮时 是否可以让 div 淡出 然后在同一位置淡入具有不同内容的不同 div 显然会使用 fadeIn and fadeOut 函数 但我不确定所有代码会是什么样子 特别是定位 以及在同一页面上执行两次的能力 如果您想淡出一
  • 如果我的文件中有翻译,如何在 DSpace 中翻译或替换主题术语

    如果语言切换 我想翻译我正在维护的 DSPace 实例中 item view xsl 中显示的主题 MeSH 术语 以前我使用下面的代码 我将其添加到XSLUtils java类 来查找 Babelmesh 站点并动态翻译它 public
  • 从 groovy 方法调用顶级函数

    我认为这有一个简单的答案 但我的网络搜索找不到它 如果我有以下内容 ideone http ideone com HVR89L def f class C public h f x new C h 此操作失败并出现以下错误 No signa
  • 在 OS X 下将 ImageMagick 编译为 64 位?

    我正在尝试安装moddims http code google com p moddims 在 OS X 上 请参阅上一个问题 https stackoverflow com questions 1185106 how do i confi
  • 用于沿大矩阵对角线插入 2x2 矩阵的代码的向量化

    我正在尝试沿大矩阵 例如 10x10 的对角线对小矩阵 2x2 进行元素插入 添加重叠值 并且仅将小矩阵插入到可以完全放入大矩阵的位置 我已经使用 for 循环实现了这一点 但我很好奇该过程是否可以矢量化 function M TestDi
  • Laravel 自定义数据透视表关系和预加载?

    我在为我的一个项目创建架构 模型时遇到问题 希望在这里获得一些帮助 我目前有 3 个表 Accessories products 和数据透视表 Product accessory
  • 在 asp.net core 应用程序的调试窗口中显示 NLog 输出

    是否可以在 Visual Studio 2017 调试窗口中显示 NLog 或内置调试器 正在记录的内容 我已将 NLog 设置为输出到文件 但对于开发来说 能够在调试窗口中查看调试消息将非常方便 我可以看到有关如何使用控制台执行此操作的文
  • 获取div中的文本[重复]

    这个问题在这里已经有答案了 可能的重复 jquery 获取没有子文本的元素的文本 https stackoverflow com questions 11362085 jquery get text for element without
  • 如何在 Angular 2 中过滤具有多个复选框的范围滑块的结果?

    我正在尝试过滤给定数组 db 的结果 有三个过滤器 价格 持续时间和类别 我尝试使用 filter 方法来过滤结果 这是我尝试过的代码链接 https stackblitz com edit multiple filters file ap