首页
学习
活动
专区
圈层
工具
发布

角2搜索
EN

Stack Overflow用户
提问于 2016-10-24 14:23:06
回答 3查看 8.9K关注 0票数 0

我试图使用一个搜索框来过滤一个使用角2的项目列表,但是当我在搜索框中输入一些内容时,它不会在服务上触发搜索方法。我知道我可能错过了一些简单的东西,但任何帮助都会很感激。

company.service.ts:

代码语言:javascript
复制
import { Injectable }    from '@angular/core';
import { Headers, Http, Response } from '@angular/http';
import { Observable } from 'rxjs/Observable';

import 'rxjs/add/operator/toPromise';

import { CompanyModel } from './company';
import { CompaniesModel } from './company';

@Injectable()
export class CompanyService {

  private headers = new Headers({'Content-Type': 'application/json'});

  constructor(private http: Http) { }

  search(term: string): Observable<CompaniesModel> {
      console.log('search service', term);
      return this.http
          .get('/api/Company/Search/?search=' + term)
          .map((r: Response) => r.json().data as CompaniesModel);
  }
}

companies.component.ts:

代码语言:javascript
复制
import { Component, OnInit } from '@angular/core';
import { Router } from '@angular/router';
import { Observable } from 'rxjs/Observable';
import { Subject } from 'rxjs/Subject';
import { FormControl } from '@angular/forms';

import { CompanyModel } from './company';
import { CompaniesModel } from './company';
import { CompanyService } from './company.service';

@Component({
  moduleId: module.id,
  selector: 'companies-list',
  templateUrl: 'companies.component.html'
})
export class CompaniesComponent implements OnInit {
    companiesModel: Observable<CompaniesModel>;
    private searchTerms = new Subject<string>();

  constructor(
      private companyService: CompanyService,
    private router: Router) { }

  search(term: string): void {
      this.searchTerms.next(term);
  }

  ngOnInit(): void {
      this.companiesModel = this.searchTerms
          .debounceTime(300) 
          .distinctUntilChanged()
          .switchMap(term => this.companyService.search(term));

  }

  gotoDetail(company: CompanyModel): void {
      let link = ['/company', company.Id];
      this.router.navigate(link);
  }
}

companies.component.html

代码语言:javascript
复制
<h2>Companies</h2>
<div>
    <label>Search: </label>
    <input #searchBox id="search-box" (keyup)="search(searchBox.value)" />
</div>
<div>
    <button (click)="create()">
        Add
    </button>
</div>
<div *ngIf="companiesModel" class="grid grid-pad">
    <ul>
        <li *ngFor="let company of companiesModel.Companies | async" (click)="gotoDetail(company)">
            <div>
                <h4>{{company.Name}}</h4>
            </div>
        </li>
    </ul>
</div>
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-10-24 14:44:53

您从未订阅主题searchTerms。如果您不订阅,您已铺设的运营商将永远不会被执行。

代码语言:javascript
复制
this.searchTerms
      .debounceTime(300) 
      .distinctUntilChanged()
      .switchMap(term => this.companyService.search(term))
      .subscribe((val) => //do something with the result here);

例如Jsbin。添加订阅语句以查看控制台日志。http://jsbin.com/zijuvet/edit?html,js,console

票数 1
EN

Stack Overflow用户

发布于 2017-03-29 06:59:29

您也可以使用下面的代码进行相同的尝试

代码语言:javascript
复制
 <input type="text" [(ngModel)]="queryString" id="search" placeholder="Search to type">

管道

代码语言:javascript
复制
@Pipe({
    name: 'FilterPipe',
})
export class FilterPipe implements PipeTransform {
    transform(value: any, input: string) {
        if (input) {
            input = input.toLowerCase();
            return value.filter(function (el: any) {
                return el.toLowerCase().indexOf(input) > -1;
            })
        }
        return value;
    }
}

您可以根据您的需求修改代码。

票数 0
EN

Stack Overflow用户

发布于 2017-06-15 23:52:51

没有自定义管道的Angular2搜索

代码语言:javascript
复制
<table>
 <thead>...</thead>
 <tbody>
       <tr *ngFor="let part of filterParts let i=index"></tr>
</tboby>

// component.ts文件中的代码

代码语言:javascript
复制
 Partsfiltering(inputName){
       this.filterParts = [];
      if(inputName != ""){
            this.parts.forEach(element => {         
       if(element.partNumber.toUpperCase().indexOf(inputName.toUpperCase())>=0){
                  this.filterParts.push(element);
               }
            });
      }else{
         this.filterParts = this.parts;
      }
     }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40220885

复制
相关文章

相似问题

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