Loading [MathJax]/jax/output/CommonHTML/config.js
社区首页 >问答首页 >应用于记录集的AngularJS自定义过滤器

应用于记录集的AngularJS自定义过滤器
EN

Stack Overflow用户
提问于 2015-10-22 07:34:53
回答 2查看 126关注 0票数 1

我正在尝试使用角过滤记录集,我遇到了一个问题。

代码语言:javascript
代码运行次数:0
复制
var licenseKeys = [
    {"product" : "XBox360", "inventoryProduct" : "XBox", "serialNumber" : "101", "status" : "Active", "actionBy" : "gamer1", "licenseKey" : "XB2-c40100697d-40b5bc3", "expiry" : "No Expiration"},
    {"product" : "XBox360", "inventoryProduct" : "XBox", "serialNumber" : "110", "status" : "Active", "actionBy" : "gamer2", "licenseKey" : "XB2-c4010697d-c9d7001", "expiry" : "No Expiration"},
    {"product" : "PS4", "inventoryProduct" : "Play Station", "serialNumber" : "111", "status" : "Active", "actionBy" : "gamer1", "licenseKey" : "PS4-c40100697d-c9d7081", "expiry" : "No Expiration"},
    {"product" : "PS3", "inventoryProduct" : "Play Station", "serialNumber" : "105", "status" : "InActive", "actionBy" : "gamer3", "licenseKey" : "PS3-c9d708000001", "expiry" : "No Expiration"},
    {"product" : "XBox One", "inventoryProduct" : "XBox", "serialNumber" : "109", "status" : "Active", "actionBy" : "gamer3", "licenseKey" : "XB3-40009b5bc3-c9d708000001", "expiry" : "No Expiration"},
    {"product" : "XBox", "inventoryProduct" : "XBox", "serialNumber" : "103", "status" : "Active", "actionBy" : "gamer1", "licenseKey" : "XB-c40100697d-c708d000001", "expiry" : "No Expiration"}
  ];

我在表中显示记录集,并在表标题下有筛选器下拉列表和文本框。我希望在Product 列上与完全匹配,因为选择XBox的产品会导致它在使用标准包含搜索时返回XBox、Xbox360和XBox 1。

我已经设置了两个数组,一个用来保存过滤器的键值对,另一个用来保存我想要执行精确匹配的列。

代码语言:javascript
代码运行次数:0
复制
var strictSearchFields = ["product", "status"];

var searchFilter = {
  product: "",
  inventoryProduct: "",
  serialNumber: "",
  status: "",
  actionBy: "",
  licenseKey: "",
  expiry: ""
};

我在我的app.js文件中设置了一个自定义过滤器

代码语言:javascript
代码运行次数:0
复制
app.filter('CustomListPageFilter', ['$filter', function($filter) {
  return function (input, searchFilters, strictSearchFields) {

    var filteredRecordset = [];

    angular.forEach(strictSearchFields, function (currentFilter) {
        if (searchFilters[currentFilter] !== "") {
            var test = currentFilter;
            filteredRecordset[currentFilter] = searchFilters[currentFilter] + " : true";
        }
    });

    return $filter('filter')(input, filteredRecordset);
  }
}]);

我在我的HTML中这样称呼它:

代码语言:javascript
代码运行次数:0
复制
licenseKeys | CustomListPageFilter : searchFilter : strictSearchFields

问题是它没有按预期运行,而且无论我选择哪种产品,我最终都不会返回任何内容。我读到了这样的补充:正确地搜索您想要搜索的字段将绕过包含,但这似乎不起作用。

EN

回答 2

Stack Overflow用户

发布于 2015-10-22 09:29:27

我认为内置过滤器应该符合您的要求,您只需在过滤器中指定{field: query}对象,如下所示:

代码语言:javascript
代码运行次数:0
复制
collection | filter:{'product': 'XBox'}:true

有关尽可能接近您提供的代码的示例,请参见

http://plnkr.co/edit/lhwEKUNGOsLtDXjGAsu9?p=catalogue

我使用一个范围变量而不是一个显式对象来控制搜索查询,并使用一个复选框来切换“严格模式”。

票数 0
EN

Stack Overflow用户

发布于 2016-01-05 07:51:50

我实际上用一个自定义过滤器解决了这个问题。本质上,它被称为这样,但柱塞拥有所有的代码。

代码语言:javascript
代码运行次数:0
复制
<tr ng-repeat="license in filteredLicenseKeys = (licenseKeys |
orderBy:'status' | licenseKeyFilter : searchFilters :
strictSearchFields)">

http://plnkr.co/edit/1VV2ugw9rNcM1CKQaItW?p=preview

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33284944

复制
相关文章
JavaScript对象的继承
基于原型链,即把一个对象的原型设置为另一个对象的实例,那么这个对象实例也就拥有了另一个对象上的属性。
闲花手札
2021/11/17
7130
JavaScript之对象继承
该方法创建一个仅用于封装继承过程的函数,该函数在内部以某种方式来增强对象,最后再像真地是它做了所有工作一样返回对象。
laixiangran
2018/07/25
4300
JavaScript 面向对象继承详解
由于js不像java那样是完全面向对象的语言,js是基于对象的,它没有类的概念。所以,要想实现继承,一般都是基于原型链的方式;
书童小二
2018/09/03
4940
JavaScript 面向对象继承详解
详解JavaScript对象继承方式
其原理如下:构造函数使用 this 关键字给所有属性和方法赋值(即采用类声明的构造函数方式)。因为构造函数只是一个函数,所以可使 Parent 构造函数 成为 Children 的方法,然后调用它。Children 就会收到 Parent 的构造函数中定义的属性和方法。例如,用下面的方式定义 Parent 和 Children:
用户6167509
2019/09/04
4430
JavaScript继承的实现方式:原型语言对象继承对象原理剖析
对象的继承:A 对象通过继承 B 对象,就能直接拥有 B 对象的所有属性和方法。这对于代码的复用是非常有用的。
周陆军
2021/08/14
7910
javascript面向对象之继承(上)
我们之前介绍了javascript面向对象的封装的相关内容,还介绍了js的call方法,今天开始讨论js的继承 这篇文章参考了《javascript高级程序设计》(第三版),但内容不局限于,网上很多关于js继承的相关内容都是来自于这本书,有兴趣的同学可以翻阅查看
陌上寒
2019/04/02
4210
javascript面向对象之继承(上)
javascript 面向对象(实现继承的几种方式)
 1、原型链继承 核心: 将父类的实例作为子类的原型 缺点: 父类新增原型方法/原型属性,子类都能访问到,父类一变其它的都变了 function Person (name) { this.name = name; }; Person.prototype.getName = function () { //对原型进行扩展 return this.name; }; funct
柴小智
2018/04/10
6910
JavaScript之面向对象学习八(继承)
简介:继承是OO语言中的一个最为人津津乐道的概念。许多OO语言都支持两种继承方式:接口继承和实现继承。接口继承只继承方法签名,而实现继承则继承实际的方法。 但是JS的函数并没有签名,所以在ECMAScript中无法实现接口继承。ECMAScript只支持实现继承。而且其实现继承只要是靠原型链来实现的。 1、原型链: ECMAScript中描述了原型链的概念,并将原型链作为实现继承的主要方法。 基本思想:利用原型让一个引用类型继承另一个引用类型的属性和方法。 简单回顾下构造函数、原型和实例的关系:每个构造函数
郑小超.
2018/01/24
5360
Javascript面向对象编程(二):构造函数的继承
这个系列的第一部分,主要介绍了如何"封装"数据和方法,以及如何从原型对象生成实例。 今天要介绍的是,对象之间的"继承"的五种方法。 比如,现在有一个"动物"对象的构造函数。   function Animal(){     this.species = "动物";   } 还有一个"猫"对象的构造函数。   function Cat(name,color){     this.name = name;     this.color = color;   } 怎样才能使"猫"继承
ruanyf
2018/04/12
1.2K0
Javascript面向对象编程(三):非构造函数的继承
这个系列的第一部分介绍了"封装",第二部分介绍了使用构造函数实现"继承"。 今天是最后一个部分,介绍不使用构造函数实现"继承"。 一、什么是"非构造函数"的继承? 比如,现在有一个对象,叫做"中国人"。   var Chinese = {     nation:'中国'   }; 还有一个对象,叫做"医生"。   var Doctor ={     career:'医生'   } 请问怎样才能让"医生"去继承"中国人",也就是说,我怎样才能生成一个"中国医生"的对象? 这里要注意,这两个
ruanyf
2018/04/12
1.3K0
重学JavaScript之面向对象的程序设计(继承)
SuperType 和SubType。每个类型分别有一个属性和一个方法。它们的主要区别是:
执行上下文
2022/07/26
3510
JavaScript面向对象程序设计之继承(一)
原型模式是JavaScript中创建对象的一种最常见的方式。JavaScript是一种弱类型的语言,没有类的概念,也不是一种面向对象的语言。但是,在JavaScript中,借助函数的原型(也就是prototype)可以实现类的功能。
CherishTheYouth
2021/02/02
3620
JavaScript之面向对象学九(原型式继承和寄生式继承)
一、原型式继承 该继承模式是由道格拉斯*克罗克福德在2006年提出的实现继承的方法. 模式的基本思路:借助原型可以基于已有的对象创建新的对象,同时还不必因此创建自定义类型。 代码如下: function object(o) { function F() { //定义一个F类型的对象 this.name="111"; } F.prototype=o;//使F的原型对象指向传入对象,也就是说F继承了传入的对象,也相当于用传入的对象重写了F的原型对象 相当于如下代码 /*
郑小超.
2018/01/24
5880
JavaScript 继承
什么是继承? 继承就是你爸爸很多钱,所以你就继承你爸爸,变成了富二代,也是个有钱的主,突然你爸爸世界杯赌球,输了个精光,于是你也变成了穷光蛋。这个就是继承 非也,非也。
chuchur
2022/10/25
3210
JavaScript 继承
简单的JavaScript继承
我想要提取这些技术的精华,以一个简单的、可复用的方式进行展示,以便使这些特性更容易不依赖其他的内容而被理解。此外我想要使其可以被简单的、高效的被使用。这里展示了一个可以使用完成后的结果来实现的实例。(译者注:既完成后的代码可以用于实现下面这个功能)
疯狂的技术宅
2019/03/27
5940
Javascript 的继承总结
写惯了 TypeScript 的人很容易了解继承(extends),比如类的继承和接口的继承等,传送门:www.tslang.cn/docs/handbo… ,但是对于ES2015出现之前,JavaScript如何实现继承的呢?毫无疑问,只能通过原型链的方式实现继承,本篇主要是在读书时遇到了原型继承的问题,回顾以下原型继承的集中方式并整理成笔记方便日后查阅。
Meteors
2021/12/08
2700
[JavaScript进阶]从JavaScript原型到面向对象
首先给出结论,JavaScript 的本身是支持面向对象的,它本身具备着强大灵活的 OOP 语言能力。但是对于使用过基于类的语言 (如 Java 或 C++) 的开发人员来说,JavaScript 确实有点令人困惑,因为它是动态的,并且本身不提供一个 class 实现。虽然在 ES6 中引入了 class 关键字,但它只是一个语法糖,本质还是基于JavaScript 的原型来实现的。
用户1462769
2019/08/12
5620
[JavaScript进阶]从JavaScript原型到面向对象
架构师JavaScript 的对象继承方式,有几种程序写法?
其原理如下:构造函数使用 this 关键字给所有属性和方法赋值(即采用类声明的构造函数方式)。因为构造函数只是一个函数,所以可使 Parent 构造函数 成为 Children 的方法,然后调用它。Children 就会收到 Parent 的构造函数中定义的属性和方法。例如,用下面的方式定义 Parent 和 Children:
Java架构师进阶技术
2020/01/19
4540
架构师JavaScript 的对象继承方式,有几种程序写法?
JavaScript实现java中的|接口|继承|抽象类|继承|多态|对象|工厂模式|重写|重载|
//定一个接口方法, var Interface = function(name,methods){ if(arguments.length != 2){ throw new Error('this instance interface constructor arguments must be 2 length!'); } this.name = name ; this.methods = [] ; for(var i = 0,len = methods.length ; i <len ;
前朝楚水
2018/04/02
1.3K0
【说站】Javascript如何用原型对象继承父类型
1、将子类所共享的方法提取出来,让子类的prototype 原型对象 = new 父类()。子类原型对象等于是实例化父类。
很酷的站长
2022/11/24
3410
【说站】Javascript如何用原型对象继承父类型

相似问题

GKE :节点重新启动/豆荚丢失

11

如果计算节点重新启动或停止工作,会发生什么情况?

11

如果我删除一些“特殊的”SQLite表,会发生什么?

14

强制一些豆荚在同一个节点上调度

23

如果两个豆荚在同一节点上,豆荚到荚的通信偶尔会失败(EKS 1.13)

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文