我正在尝试过滤用户搜索查询的输入,这样如果他们输入他们要查找的内容的特定名称,则只返回该内容。
我有一个Angular2演示应用程序(http://mazzoangular2.azurewebsites.net/)我正在努力只返回搜索艺术家作品的搜索结果。现在它将返回包含第一个字母输入的所有画作。
以下是打字稿搜索代码:
import { Pipe } from '@angular/core';
@Pipe({
name: 'find'
})
export class SearchPipe {
transform(pipeData, pipeModifier) {
return pipeData.filter((eachItem) => {
return
eachItem['name'].toLowerCase().includes(pipeModifier.toLowerCase()) ||
eachItem['shortname'].toLowerCase().includes(pipeModifier.toLowerCase());
});
}
}//End class SearchPipe
SearchPipe.prototype.transform = function (pipeData, _a) {
var pipeModifier = _a[0];
return pipeData.filter(function (eachItem) {
return
eachItem['name'].toLowerCase().includes(pipeModifier.toLowerCase()) ||
eachItem['shortname'].toLowerCase().includes(pipeModifier.toLowerCase());
});
}
答案 0 :(得分:0)
transform(pipeData, [pipeModifier])
在您的代码中,您只使用pipeModifer的第一个字符进行评估。您的过滤器逻辑正在运行,只是当您使用' Blah'它只使用' b'并放弃其余的搜索。
这种情况正在发生,因为在声明转换函数时,您将传递pipeModifier作为数组的第一个元素。在typescript中,这意味着它假设pipeModifier的第二个参数是一个数组,并且您希望pipeModifier成为该数组的第一个元素。您只需更改
即可解决此问题transform(pipeData, pipeModifier)
到
function test(var1, [var2, var3]){
console.log(var2);
}
Typescript如何将其转换为Javascript的示例:
打字稿功能
function test(var1, _a) {
var var2 = _a[0], var3 = _a[1];
console.log(var2);
}
产生的Javascript函数
[CImg] *** CImgIOException *** cimg::fopen(): Failed to open file '~/tiles/0/0/0.bmp' with mode 'wb'.
无论数组有多大,它都只使用前两个元素。