我正在为Angular Pipe创建一个函数,其中一个参数需要是模板*ngFor="let row of tableRows | filter: searchText : keyName"
中的一个字符串,然后使用它来迭代管道函数中的对象
:let keyName = 'name.value'
管:
transform(items: any[], searchText: string, keyName: string = ''): any[] {
if (!items) {
return [];
}
if (!searchText) {
return items;
}
searchText = searchText.toLowerCase();
console.log(keyName);
return items.filter( it => {
return it.keyName.toLowerCase().includes(searchText); //THIS HERE NEEDS TO MATCH THE STRING PROVIDED
});
}
所以我们假设参数字符串name.value
被传递到函数中,it.keyName.toLowerCase()
需要被解释为it.name.value.toLowerCase()
答案 0 :(得分:2)
您可以使用property accessor bracket notation(例如object[property]
)来访问嵌套属性。
例如,尝试这里描述的deepAccessUsingString
函数:
https://medium.com/@chekofif/using-es6-s-proxy-for-safe-object-property-access-f42fa4380b2c
function deepAccessUsingString(obj, key){
return key.split('.').reduce((nestedObject, key) => {
if(nestedObject && key in nestedObject) {
return nestedObject[key];
}
return undefined;
}, obj);
}
在代码中使用如下:
return deepAccessUsingString(it, keyName).toLowerCase().includes(searchText);