首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >角2搜索文本

角2搜索文本
EN

Stack Overflow用户
提问于 2016-02-23 07:26:45
回答 2查看 724关注 0票数 2

我有一个带有搜索功能的下拉菜单和一个带有项目(和复选框)的列表,我想让搜索项更新列表中的项目。

示例:

我有5个项目:- project1 -土豆- listItem1 - listItem2 -随便什么

这个想法是,当你没有键入任何你看到的所有5个项目,如果你键入"p“,你只会看到project1和土豆。到目前为止,这是我的代码:

代码语言:javascript
复制
<div id="dropdown-menu">
    <button id="show-users" (click)="showMenu = !showMenu">Project toevoegen</button> 
    <div id="drp-project-select">
        <div class="scroller" [hidden]="!showMenu">
            <div id="search-wrapper">
                <i class="fa fa-search"></i>
                <input [(ngModel)]="searchTerm" type="text" placeholder="Zoek op naam..." >
            </div>   
            <ul>
                <li *ngFor="#project of projectdata.LoginResponse?.ProjectVM, #i = index">
                    <label class="checkbox-label" >
                        <input type="checkbox" class="dropdown-checkbox" [(ngModel)]="project.isChecked" >
                        <span>{{project.Project}}</span>
                    </label>
                </li>
            </ul>
        </div>
    </div>
</div>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-23 08:35:41

用过滤管。有关完整的示例,请参见https://plnkr.co/edit/4Il8QMlh9UYQ4hyrnU3W?p=preview

代码语言:javascript
复制
<input [(ngModel)]="searchTerm" type="text" placeholder="Zoek op naam..." #search>
...
<li *ngFor="#project of projectdata.LoginResponse?.ProjectVM | filter:'Project':search.value, #i = index">

只支持一列过滤,但不应该很难扩展。如果没有要防止的更改,则返回相同的结果。

例外情况:检查表达式后,表达式发生了更改。

代码语言:javascript
复制
import {Pipe, PipeTransform} from 'angular2/core'

@Pipe({name: 'filter'})
export class FilterPipe implements PipeTransform {
  previousResult:any[];

  transform(value:any[], args:string[]) : any {
    if(!value || !args || args.length < 2 || !args[0] || !args[1]) {
      return value;
    }
    console.log('value: ' + value);
    console.log('args: ' + args);

    var result = value.filter((val) => {
      console.log('item: ' + val[args[0]])
      var contains = val[args[0]].indexOf(args[1]) > -1;
      console.log('found: ' + contains);
      return contains;
    });

    console.log(result);
    if(this.previousResult && this.previousResult.length == result.length) {
      for(var i = 0; i < result.length; i++) {
        if(this.previousResult[i] != result[i]) {
          console.log(i);
          this.previousResult = result;
          return this.previousResult;
        }
      }
    }
    this.previousResult = result;
    return this.previousResult;
  }
}
票数 1
EN

Stack Overflow用户

发布于 2016-02-23 08:41:36

您可以利用表单控件执行此操作:

代码语言:javascript
复制
constructor() {
  this.ctrl = new Control();

  // Some data for testing  
  this.showMenu = true;
  this.projectdata = {
    LoginResponse: {
      ProjectVM: [{
        isChecked: true,
        Project: 'test'
      }]
    }
  };

  this.initialData = this.projectdata.LoginResponse.ProjectVM
  this.filteredData = this.initialData.slice(0, 5);

  this.ctrl.valueChanges.subscribe(
    (val) => {
      if (!val) {
        this.filteredData = this.initialData.slice(0, 5);
      }
      this.filteredData = this.initialData.filter((project) => {
        return new RegExp('^'+val).test(project.Project);
      });
    });
  }

不要忘记引用输入上的控件:

代码语言:javascript
复制
<input [ngFormControl]="ctrl" type="text" placeholder="Zoek op naam..." >

参见这个plunkr:https://plnkr.co/edit/ocgXxAvcPPtvW5SXEDQ9?p=preview

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35571269

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档