首页 文章

用于嵌套json数组的Angular 4管道过滤器

提问于
浏览
1

我正在尝试使用自定义管道使用带有ngModel的输入字段来过滤我的Json数据循环 . 基本上我有一个带有大量项目的侧栏,所以我想有一个输入字段,以便我可以搜索侧边栏中的项目 . 现在侧边栏项目可以是单个项目,也可以包含子项目 . 这是我的侧边栏数组(基本上是侧边栏的模型),我想从中过滤项目:

Array

export const menu_items = [
  {
    "title": "Dashboard",
    "class": "nav-item",
    "iconClass": "icon-speedometer"
  },
  {
    "title": "Configuration",
    "class": "nav-item nav-dropdown",
    children: [
      {
        "title": "Area Setup",
        "iconClass": "icon-puzzle",
        "dropdown" : true,
        children: [
          {
            "title": "Company",
            "iconClass": "icon-puzzle"
          },
          {
            "title": "Office",
            "iconClass": "icon-puzzle"
          }
        ]
      },
      {
        "title": "User Setup",
        "iconClass": "icon-puzzle",
        "dropdown" : true,
        children: [
          {
            "title": "Company",
            "iconClass": "icon-puzzle"
          },
          {
            "title": "Profile",
            "iconClass": "icon-puzzle"
          },
          {
            "title": "User",
            "iconClass": "icon-puzzle"
          },
          {
            "title": "Role",
            "iconClass": "icon-puzzle"
          }
        ]
      },
    ]
  },
  {
    "title": "Receiving",
    "class": "nav-item",
    children: [
      {
        "title": "Receipt Enquiry",
        "iconClass": "icon-speedometer"
      },
      {
        "title": "Receiving",
        "iconClass": "icon-speedometer"
      },
    ]
  },
  {
    "title": "Logs",
    "class": "nav-item",
    children: [
      {
        "title": "Inventory Logs",
        "iconClass": "icon-list"
      },
      {
        "title": "Audit Logs",
        "iconClass": "icon-list"
      },
      {
        "title": "Process Logs",
        "iconClass": "icon-list"
      }
    ]
  },
];

这是我的组件

import { MenuModel, menu_items } from "./menu.model";

@Component({
  selector: 'app-dashboard',
  templateUrl: './layout.component.html',
  providers: [MenuModel]
})

export class LayoutComponent {

searchText = '';

public  menu_items = menu_items;

}

这是我的观点: View

<input type="text" class="form-control" [(ngModel)]="searchText" placeholder="Search in menu">
<div class="sidebar">
  <nav class="sidebar-nav">
    <ul *ngFor="let menu of menu_items | filter : searchText" class="nav" >
      <li class="nav-title text-center">
        <span>{{menu.title}}</span>
      </li>
      <li *ngFor="let child of menu.children" class="{{menu.class}}" >
        <a *ngIf="!child.component" class="nav-link" href="javascript:void(0)" >          <i class="{{child.iconClass}}"> </i> 
        {{child.title}}
        <span *ngIf="child.new" class="badge badge-info">NEW </span>
        </a>
        <ul *ngIf="child.children" class="nav-dropdown-items">
          <li class="nav-item" *ngFor="let childlevel2 of child.children">
            <a class="nav-link"  href="javascript:void(0)" 
              <i class="{{childlevel2.iconClass}}"></i>
              {{childlevel2.title}}
            </a>
          </li>
        </ul>
      </li>
    </ul>
  </nav>
</div>

我没有太多使用自定义管道的经验我在论坛上搜索并创建了这样的过滤器,但它无法正常工作

Custom Filter Pipe

import { Pipe, PipeTransform } from '@angular/core';
@Pipe({
  name: 'filter'
})
export class FilterPipe implements PipeTransform {
  transform(items: any[], searchText: string): any[] {
    if(!items) return [];
    if(!searchText) return items;
    searchText = searchText.toLowerCase();

    return items.filter(item => item.title.includes(searchText));
  }
}

现在我需要的是,当我输入任何术语时,我的过滤器会返回所有那些 Headers 与搜索词匹配的数组(最终将成为我的列表项)

1 回答

  • 0

    您是否尝试运行:## filter:{} ##

相关问题