我有一个弯角管道,它只是从ngFor过滤掉文本。它与json对象的单个级别一起使用时效果很好,但是在有多个级别的对象时失败。
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({ name: 'simpleSearch' })
export class SimpleSearchPipe implements PipeTransform {
public transform(value, keys: string, term: string) {
if (!term) return value;
return (value || [])
.filter(item =>
keys.split(',').some(key => {
item.hasOwnProperty(key) && new RegExp(term, 'gi').test(item[key])
})
);
}
}
<div *ngFor="let issue of issuesData
| simpleSearch: 'key,fields.summary,fields.priority.name': searchTerm"
></div>
此处搜索对于字段“ key”(json对象的第一级)非常有效,但不适用于其他键。
任何人都可以帮助我解决此问题,或者如果您需要更多信息,请告诉我。
答案 0 :(得分:1)
基于此提取嵌套的对象值:
var myObj = {
key: 'myKcley',
fields: {
summary: 'asdf'
}
};
var getNestedObject = (nestedObj, pathArr) => {
return pathArr.reduce((obj, key) =>
(obj && obj[key] !== 'undefined') ? obj[key] : undefined, nestedObj);
}
var objKeys = 'key, fields.summary';
objKeys.split(',').forEach(key => {
if(key.includes('.')) {
var keyArray = key.trim().split('.');
var value = getNestedObject(myObj, keyArray);
console.log(value);
}
});
答案 1 :(得分:1)
尝试使用lodash
的{{3}}函数:
import { Pipe, PipeTransform } from '@angular/core';
import * as lodash from 'lodash';
@Pipe({ name: 'simpleSearch' })
export class SimpleSearchPipe implements PipeTransform {
public transform(value, keys: string, term: string) {
if (!term) return value;
return (value || [])
.filter(item =>
keys.split(',').some(key => {
const val = lodash.get(item, key, undefined);
return val !== undefined && new RegExp(term, 'gi').test(val);
})
);
}
}
此外,在您的some()
函数中,您需要通过提供return
语句或删除大括号来返回布尔值。我在您的代码中添加了return
。