【问题标题】:Select Option Filter in Angular 4 with pipe使用管道在 Angular 4 中选择选项过滤器
【发布时间】:2018-02-24 06:09:40
【问题描述】:

我正在尝试使用选择框下拉菜单创建一个管道,以过滤 json 数据中的列表。我用选择框管道创建了一个管道。我无法让我的过滤器在管道中工作。请帮忙。这是我的代码 -

选择框 -

<select class="form-control" [(ngModel)]="sel" name="sel">
   <option selected disabled>Select</option>
    <option *ngFor="let positionOpt of positionSelect" [value] = "sel">{{positionOpt.name}}</option>
</select>

选择框选项字段的数据 -

positionSelect:any[] = [
{
  name: "Social Media Manager",
  position: "Social Media Manager"
},
{
  name: "Product Manager",
  position: "Product Manager"
}
]

选择框的管道 -

import { Pipe, PipeTransform } from '@angular/core';
import { JobsService } from '../services/jobs.service';

@Pipe({
  name: 'selectbox'
})
export class SelectboxPipe implements PipeTransform {

  transform(opt: any, sel?: any): any {
    return (opt || opt === '0')
        ? opt.filter(sal => { return sal.position == sel})
        : opt;
}

}

职位列表数据 -

<ul class="jobs-list">
    <li *ngFor="let joblists of jobList | selectbox: sel">
         {{joblists.position}}
    </li>
</ul>

Json 中的这个 jobList 数据来自服务。我应该在 jobList 的选择选项字段中使用 *ngFor 还是可以来自不同的 json 数据。请帮助选择框过滤器。

【问题讨论】:

  • 你有什么难解的问题
  • 检查我的答案@Akshay 它正在工作 selectboxpipe

标签: json angular typescript


【解决方案1】:

试试这个:

import { Pipe, PipeTransform } from '@angular/core';
import { JobsService } from '../services/jobs.service';

@Pipe({
  name: 'selectbox'
})
export class SelectboxPipe implements PipeTransform {

    transform(items: any, sel?: any): any {
        return sel ? items.filter(sal => sal.position === sel) : items;
    }
}
<select class="form-control" [(ngModel)]="sel" name="sel">
    <option *ngFor="let positionOpt of positionSelect" [ngValue]="positionOpt.position">{{positionOpt.name}}</option>
</select>

<ul class="jobs-list">
    <li *ngFor="let joblists of jobList | selectbox: sel">
         {{joblists.position}}
    </li>
</ul>

【讨论】:

  • 你好@Faly,我添加了这个 - console.log('sel',sel);检查控制台。它是说--> sel undefined。请帮忙
  • 确保你有属性 sel iny 你的组件的类:export class YourComponent { public sel: any; // ...
【解决方案2】:

试试这个: 我得到了您在下拉列表中选择的对象的 sel 值。该值显示在 selectbox.pipe.ts console.log

app.component.html

<select class="form-control" name="sel" id="sel" [(ngModel)]="sel">
    <option [ngValue]="undefined" disabled  selected>Select...</option>
    <option *ngFor="let positionOpt of positionSelect" [ngValue]="positionOpt">{{positionOpt.name}}</option>
</select>

<ul class="jobs-list">
    {{sel}}
    <li *ngFor="let joblists of jobList | selectbox: sel">
         {{joblists.position}}
    </li>
</ul>

app.component.ts

export class AppComponent {
    private sel: any;
    private jobList: any[];
    private positionSelect: any[] = [{
        name: "Social Media Manager",
        position: "Social Media Manager"
    },
    {
        name: "Product Manager",
        position: "Product Manager"
    }]
}

selectbox.pipe.ts

import { Component, NgModule, Pipe, PipeTransform } from '@angular/core'
import { BrowserModule } from '@angular/platform-browser'

@Pipe({
    name: 'selectbox'
})

export class SelectboxPipe implements PipeTransform {
    transform(opt: any, sel?: any): any {
        console.log('sel', sel);
        return (opt || opt === '0') ? opt.filter(sal => { return sal.position == sel }) : opt;
    }
}

app.module.ts

import { SelectboxPipe } from './selectbox.pipe';

@NgModule({
    declarations: [
        SelectboxPipe
    ],
    exports: [   
        SelectboxPipe
    ]
})

【讨论】:

    猜你喜欢
    • 2018-06-16
    • 2017-11-29
    • 1970-01-01
    • 2019-07-04
    • 2016-10-31
    • 2020-07-21
    • 2011-10-27
    • 2020-08-11
    相关资源
    最近更新 更多