搜索和过滤的打字稿代码

时间:2017-05-30 20:24:34

标签: javascript angular typescript

我正在尝试过滤用户搜索查询的输入,这样如果他们输入他们要查找的内容的特定名称,则只返回该内容。

我有一个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());
    });
}

1 个答案:

答案 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'.

无论数组有多大,它都只使用前两个元素。