如何在角度2中进行全局搜索?

前端之家收集整理的这篇文章主要介绍了如何在角度2中进行全局搜索?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我是angular2中的新开发者,我想在json对象数组中进行全局搜索.例如,这个数组:
invoiceList = 
  [
    {
      invoiceNumber: 1234,invoiceSupplier: "test",invoiceStatus: "Import error",invoiceCategory: "invoice with GR",date: "22/01/2017",amount : 134527
    },...
  ];

我想这样做我的搜索

问题和困难在于:

>我想仅根据某些值进行搜索(例如:状态,供应商名称,编号……)并显示其他字段(如日期,净金额等).
>我想根据一些值(例如:数量,供应商,日期和金额)按最终结果排序.而且我不知道如何在angular2中做到这一点.
>最后,我想在angular2中做一个“等效”的ng-show?我的意思是我只想按下搜索按钮才能显示表格,如果我们点击取消,它将删除它.

我知道在角度1中这样做很简单,我们可以使用过滤器,’orderBy’和类似的东西,但显然在angular2中,我们不能这样做而且我非常困惑.你能帮我解决一下吗???

这是我的组件代码

import { Component,OnInit } from '@angular/core';

  @Component({
    selector: 'app-search',templateUrl: './search.component.html'
  })
  export class SearchComponent implements OnInit {

  invoiceList = [{invoiceNumber:  1234,invoiceSupplier : "test",invoiceStatus : "Import error",date : "22/01/2017",amount : 134527},{invoiceNumber:  15672,invoiceSupplier : "test11",invoiceCategory: "invoice without PO",date : "02/01/2017",amount : 134.3},{invoiceNumber:  99863,invoiceSupplier : "test22",invoiceStatus : "Other Document",date : "10/12/2016",amount : 189},{invoiceNumber:  24561,invoiceSupplier : "test50",date : "15/01/2017",amount : -134527},];


    constructor() { }

    ngOnInit() {
    }

  }

和我的HTML代码

<form>
    <table>
      <tr>
        <td>Invoice Number :</td>
        <td>
          <input name="invoiceNumber">
        </td>

        <td>Invoice Supplier Name :</td>
        <td>
          <input name="invoiceSupplier">
        </td>
      </tr>

      <tr>
        <td>Invoice Status :</td>
        <td>
          <select name="invoiceStatus">

            <option></option>
            <option> Import error </option>
            <option> Invoice control required </option>
            <option>Rejected from SAP </option>
            <option>Other Document </option>
            <option> Invoice created manually in SAP </option>
            <option>To be integrated in SAP </option>
            <option> Integrated in SAP </option>
            <option> Booked in SAP </option>
            <option>Paid in SAP</option>
          </select>
        </td>

        <td>Invoice Category :</td>
        <td>

          <select name="invoiceCategory">
            <option></option>
            <option>Invoice with GR</option>
            <option>Invoice without GR</option>
            <option>Invoice without PO</option>

          </select>
        </td>
      </tr>

      <tr>
        <td>Order :</td>
        <td>
          <select name="order">

            <option> Number </option>
            <option> Supplier </option>
            <option> Date </option>
            <option> Net Amount </option>
          </select>
        </td>
      </tr>

      <tr>
        <td>
          <button type="submit">Search</button>
        </td>
        <td>
          <div class="detail">
            <button type="reset">Cancel</button>
          </div>
        </td>
      </tr>

    </table>
  </form>

我知道到目前为止我没有做任何事情,但我在angular2时真的很新,我真的很困惑.你能帮助我至少与组件部分???

先感谢您 !

完成!! – see@PLUNKER
@Component({
  selector: 'app-search',templateUrl: 'src/search.component.html'
})
export class SearchComponent{

 invoiceList = [
  {invoiceNumber:  1234,];

 invoiceCats = [];
 invoiceStatuses = [];
 invoiceNumbers = [];
 invoiceFields = Object.keys(this.invoiceList[0]);

 invoiceStatus = "";
 invoiceCategory = "";
 invoiceNumber;
 invoiceSupplier;
 order = this.invoiceFields[0];

 searchResults = [];

 constructor() { 
   this.invoiceList.forEach(i => {
     if(this.invoiceCats.indexOf(i.invoiceCategory) === -1) {
      this.invoiceCats.push(i.invoiceCategory);
     }

     if(this.invoiceStatuses.indexOf(i.invoiceStatus) === -1) {
      this.invoiceStatuses.push(i.invoiceStatus);
     }

     this.invoiceNumbers.push(i.invoiceNumber);
   })
 }

 ngOnInit() {
 }

 searchNow(e) {
   e.preventDefault();
   this.searchResults = this.invoiceList.filter(i => {
     return (this.invoiceStatus ? i.invoiceStatus === this.invoiceStatus : true) 
        &&  (this.invoiceNumber ? i.invoiceNumber === this.invoiceNumber : true)
        &&  (this.invoiceSupplier ? i.invoiceSupplier === this.invoiceSupplier : true)
        &&  (this.invoiceCategory ? i.invoiceCategory === this.invoiceCategory : true)
   }).sort((a,b) => {
      if(['invoiceNumber','amount'].indexOf(this.order) > -1) return a[this.order] - b[this.order];
      if(['invoiceSupplier','invoiceStatus','invoiceCategory'].indexOf(this.order) > -1) return (a[this.order] == [a[this.order],b[this.order]].sort()[1] ? 1 : -1);
      if(this.order === 'date') {
        const x = new Date(a.date.split('/').reverse().join('/'));
        const y = new Date(b.date.split('/').reverse().join('/'));
        return x.getTime() - y.getTime();
      }
   })
 }

}

注意:构造函数内部的代码只是生成元数据.

<form (submit)="searchNow($event)">
    <table>
      <tr>
        <td>Invoice Number :</td>
        <td>
          <input name="invoiceNumber" [(ngModel)]="invoiceNumber" type="number">
        </td>

        <td>Invoice Supplier Name :</td>
        <td>
          <input name="invoiceSupplier" [(ngModel)]="invoiceSupplier" type="text">
        </td>
      </tr>

      <tr>
        <td>Invoice Status :</td>
        <td>
          <select name="invoiceStatus" [(ngModel)]="invoiceStatus">
            <option value="">Any</option>
            <option *ngFor="let iS of invoiceStatuses" [value]="iS">{{iS}}</option>
          </select>
        </td>

        <td>Invoice Category :</td>
        <td>

          <select name="invoiceCategory" [(ngModel)]="invoiceCategory">
            <option value="">Any</option>
            <option *ngFor="let iC of invoiceCats" [value]="iC">{{iC}}</option>
          </select>
        </td>
      </tr>

      <tr>
        <td>Order By:</td>
        <td>
          <select name="order" [(ngModel)]="order">
            <option *ngFor="let iF of invoiceFields" [value]="iF">{{iF}}</option>
          </select>
        </td>
      </tr>

      <tr>
        <td>
          <button type="submit">Search</button>
        </td>
        <td>
          <div class="detail">
            <button type="reset">Cancel</button>
          </div>
        </td>
      </tr>

    </table>
  </form>

  <div>
    <ul>
      <li *ngFor="let i of searchResults">Number: {{i.invoiceNumber}},Supplier: {{i.invoiceSupplier}},Date: {{i.date}}</li>
    </ul>
  </div>

注意:在Angular2中有很多甚至数百种方法可以使用表单,你可以使用任何你喜欢的方法,我只使用最简单的方法.

原文链接:https://www.f2er.com/angularjs/141744.html

猜你在找的Angularjs相关文章