gpt4 book ai didi

javascript - Angular 5 - 在带有管道的选择标签中使用过滤器

转载 作者:行者123 更新时间:2023-11-30 20:33:04 25 4
gpt4 key购买 nike

我有一个 select html 标签,我想按所选值过滤我的结果列表。我正在使用管道在 *ngFor 创建的列表中显示它们。当我添加一个新项目时,选择标签会添加一个新选项,即使还有一个同名的选项。我该如何解决这个问题?我希望我的选择标签只显示唯一值(过滤器???)。我也想设置一个默认值。

截图:

enter image description here

App.component.html:

<div class="container">
<div class="row">
<div class="col-xs-12 col-sm-10 col-md-8 col-sm-offset-1 col-md-offset-2">

<select
name="serverStatus"
id="serverStatus"
[(ngModel)]="filteredStatus">
<option
*ngFor="let server of servers"
value="{{server.status}}">{{server.status}}</option>
</select>
<hr>
<ul class="list-group">
<li
class="list-group-item"
*ngFor="let server of servers | filter:filteredStatus:'status'"
[ngClass]="getStatusClasses(server)">
<span
class="badge">
{{ server.status }}
</span>
<strong>{{ server.name }}</strong> |
{{ server.instanceType | uppercase }} |
{{ server.started | date:'fullDate' | uppercase }}
</li>
</ul>
</div>

App.component.ts:

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

@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
servers = [
{
instanceType: 'medium',
name: 'Production Server',
status: 'stable',
started: new Date(15, 1, 2017)
},
{
instanceType: 'large',
name: 'User Database',
status: 'stable',
started: new Date(15, 1, 2017)
},
{
instanceType: 'small',
name: 'Development Server',
status: 'offline',
started: new Date(15, 1, 2017)
},
{
instanceType: 'small',
name: 'Testing Environment Server',
status: 'critical',
started: new Date(15, 1, 2017)
}
];

filteredStatus = '';

getStatusClasses(server: {instanceType: string, name: string, status: string, started: Date}) {
return {
'list-group-item-success': server.status === 'stable',
'list-group-item-warning': server.status === 'offline',
'list-group-item-danger': server.status === 'critical'
};
}
}

fiter.pipe.ts:

import { Pipe, PipeTransform } from '@angular/core';

@Pipe({
name: 'filter'
})
export class FilterPipe implements PipeTransform {

transform(value: string[], filterString: string, propName:string): any {
if (value.length === 0 || filterString === '') {
return value;
}
const resultArray = [];
for (const item of value) {
if (item[propName] === filterString) {
resultArray.push(item)
}
}
return resultArray;
}
}

这是一个 stackblitz 工作示例:https://angular-rwmfbj.stackblitz.io编辑:https://stackblitz.com/edit/angular-nck1kn

最佳答案

试试这个

App.component.ts

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

@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
servers = [
{
instanceType: 'medium',
name: 'Production Server',
status: 'stable',
started: new Date(15, 1, 2017)
},
{
instanceType: 'large',
name: 'User Database',
status: 'stable',
started: new Date(15, 1, 2017)
},
{
instanceType: 'small',
name: 'Development Server',
status: 'offline',
started: new Date(15, 1, 2017)
},
{
instanceType: 'small',
name: 'Testing Environment Server',
status: 'critical',
started: new Date(15, 1, 2017)
}
];

filteredStatus = '';

serverStatus: {
instanceType: string,
name: string,
status: string,
started: Date
}[] = [];

constructor(){
this.initializeStatus();

//For setting the default value of the select try this
if(this.serverStatus.length != 0)
this.filteredStatus = this.serverStatus[0].status;
}

getStatusClasses(server: {instanceType: string, name: string, status: string, started: Date}) {
return {
'list-group-item-success': server.status === 'stable',
'list-group-item-warning': server.status === 'offline',
'list-group-item-danger': server.status === 'critical'
};
}

//Initalize the status
initializeStatus(){
this.serverStatus = [];
//Container for the current status
let currentStatus = "";
for(let x of this.servers){
if(x.status != currentStatus){
this.serverStatus.push(x);
}
//Equate for reference
currentStatus = x.status;
}
}
}

App.component.html

*ngFor="let server of servers" 更改为此 *ngFor="let server of serverStatus"

关于javascript - Angular 5 - 在带有管道的选择标签中使用过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50132189/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com