【问题标题】:angular2 rxjs filter threads with input textangular2 rxjs 过滤线程与输入文本
【发布时间】:2016-08-26 08:50:53
【问题描述】:

您好,我正在构建一个类似 stackoverflow 的小型论坛,并且正在尝试为我的主题标题实现一个简单的文本过滤器。

我最近开始学习 rxjs 和管道,所以这是我迄今为止提出的 2 个问题

  1. 我不确定我应该使用哪种方法来解析标题,我目前正在使用 string.include() 但它不能正常工作(例如,如果我输入谁,然后“如何”显示,如果我输入“如何”然后“谁”显示...

更新:到目前为止,主要错误似乎是管道只接收第一个字母......但不知道是什么原因造成的。

  1. 我使用的是纯管道,属性通过主题传递给它,不确定这是否是最佳实践方式...

https://plnkr.co/edit/VViLYFd5oFTwNqP9eoZi?p=preview

感谢您的帮助和建议

组件

@Component({
  selector: 'dashboard-main',
  pipes:[FilterTitle],
  template:`
  <input type="text" id="title" [(ngModel)]="binding" (keyup)="trigger()">
  <h3>{{binding}}</h3>
  <hr>
  <h3>{{testText}}</h3>
<hr>
<ul>
<li *ngFor="#thread of threadlist | filterTitle:testText">{{thread.title}}</li>
</ul>
  `
})
export class DashboardMainComponent implements OnInit{

  binding:string='Input';
  text$:Subject<string> = new Subject<string>();
  testText:string="";

  ngOnInit():any {
    this.text$.debounceTime(500).distinctUntilChanged().subscribe( text => this.setText(text))
  }

  trigger(){
    this.text$.next(this.binding);
  }

  setText(text:string){
    console.log(text);
    this.testText = text;
  }

  threadlist=[
    {
      title:'Who are you?'
    },
     {
      title:'How are you?'
    },
     {
      title:'Where are you?'
    }
    ]
}

管道

@Pipe({
  name:'filterTitle',

})

export class FilterTitle implements PipeTransform{
    transform(array:any[], [search]):any {
      if(search ===''){
        return array
      }
      return array.filter(thread => {
        return thread.title.includes(search)
      })
    }
}

【问题讨论】:

  • “但它不能正常工作”究竟是什么意思? Plunker 似乎工作正常。
  • 如果我输入“how”然后“你是谁?”还有你在哪里?'显示,如果我输入“areasdlkfasdf”然后显示一些,...

标签: text filter angular rxjs5 angular2-pipe


【解决方案1】:

管道中的参数声明错误。应该是

transform(array:any[], search):any {

而不是

transform(array:any[], [search]):any {

由于 beta.16 管道不再传递数组或参数。每个值都作为一个独特的参数传递https://github.com/angular/angular/blob/master/CHANGELOG.md#200-beta16-2016-04-26

Plunker example

【讨论】:

  • 感谢提示!,独特的语法是什么?空格、逗号还是分号? transform(array:any[], arg1 arg2...):any {} 并且在视图中? {让项目的项目|管道:arg1:arg2}
  • 对不起,我不明白这个问题。第一个参数是传递给管道的值,每个后续参数都可以像 someVal | myPipe:param1:param2 一样被接受,比如 transform(array:any[], param1, param2):any {
  • 谢谢我的要求,所以参数将用逗号分隔
  • 完全正确,就像在任何其他具有多个参数的方法中一样。
猜你喜欢
  • 1970-01-01
  • 2017-03-05
  • 2017-07-01
  • 2021-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多