2016-11-19 83 views
0

我收到错误Cannot read property 'bind' of undefined 我创建了一个自定义过滤器来按名称过滤掉搜索字段,但我收到此错误并且无法越过它。任何帮助表示赞赏。 也跟进问题。在Angular2的最新迭代,我们不再添加过滤器:[FilterArrayPipe],@Component下,而是通过在NGModule声明app.module.ts增加吗?无法读取属性“绑定”未定义的搜索过滤器

filter.pipe.ts

  import {Pipe, PipeTransform} from '@angular/core'; 

     @Pipe({name: 'filter'}) 
     export class FilterArrayPipe implements PipeTransform{ 

     transform(value, args){ 
    if(!args || !args[0]) { 
     return value; 

     } 

    else if(value) { 
    return value.filter(item => { 
    for (let key in item){ 

    if((typeof item[key] === 'string' || item[key] instanceof String)&& 
    (item[key].indexOf(args[0]) !== -1)) { 
    return true; 

    } 

    } 


    }) 
    } 

    } 

    } 

users.component.html

<div class="container"> 

    <div class="input-group"> 
     <input type="text" id="search" class="form-control" placeholder="Search Users" [(ngModel)]= "filterText"> 

     </div><!-- /input-group --> 
     <br> 
    <table class="table table-bordered"> 
    <thead> 
     <tr> 
     <th>Name</th> 
     <th>Username</th> 
     <th>Email</th> 
     <th>Phone</th> 
     </tr> 
    </thead> 
    <tbody *ngFor="let user of _users | filter: filterText" > 
     <tr> 
     <td>{{user.name}}</td> 
     <td>{{user.username}}</td> 
     <td>{{user.email}}</td> 
      <td>{{user.phone}}</td> 
     </tr> 

    </tbody> 
    </table> 
</div> 

enter image description here

+0

在这行做你的错误? – Puigcerber

+0

它没有指定,但它是管道|过滤器:触发它的filterText。查看上面添加的截图。 – user6680

回答

0

你有一个错字。当它应该是transform时,您正在实施tranform方法。

它可能会帮助您为下一个导入PipeTransform并声明您的类为export class FilterArrayPipe implements PipeTransform {,使TypeScript编译器失败并警告您有关错误的方法。

+0

不错,我接受了你的建议并实现了PipeTransform,但现在我得到了一个新的错误。错误:未定义我更新的代码上面根据您的建议,截图以及 – user6680

+0

如果数组的第一个元素存在,但如果数组要检查无法读取属性“0”:无法未定义 类型错误的读取属性“0”本身存在,所以改变你的if条件为'if(!args ||!args [0]){'。 – Puigcerber

相关问题