Hee*_*ena 6 angular-material angular
尝试使用角材料在角2中实现简单的应用。
我用分页实现了一个简单的表。
我也使用了mat-select组件,但是为此,我想实现一个搜索过滤器来键入并从列表中搜索所需的选项。
<table>
<tr><td> Department</td>
<td>
<mat-form-field>
<mat-select placeholder=" ">
<mat-option> </mat-option>
<mat-option *ngFor="let dep of dept" [value]="dep">{{dep}}</mat-option>
</mat-select>
</mat-form-field><br/>
</td>
</tr>
</table>
<br><br>
<button >Search</button>
<button >Reset</button>
<button >Close</button>
<mat-card>
<div class="example-container mat-elevation-z8">
<mat-table #table [dataSource]="dataSource">
<!-- Account No. Column -->
<ng-container matColumnDef="accno">
<mat-header-cell *matHeaderCellDef> Account No. </mat-header-cell>
<mat-cell *matCellDef="let element"> {{element.accno}} </mat-cell>
</ng-container>
<!-- Account Description Column -->
<ng-container matColumnDef="accdesc">
<mat-header-cell *matHeaderCellDef> Account Description </mat-header-cell>
<mat-cell *matCellDef="let element"> {{element.accdesc}} </mat-cell>
</ng-container>
<!-- Investigator Column -->
<ng-container matColumnDef="investigator">
<mat-header-cell *matHeaderCellDef> Investigator </mat-header-cell>
<mat-cell *matCellDef="let element"> {{element.investigator}} </mat-cell>
</ng-container>
<!-- Account CPC Column -->
<ng-container matColumnDef="accCPC">
<mat-header-cell *matHeaderCellDef> Account CPC </mat-header-cell>
<mat-cell *matCellDef="let element"> {{element.accCPC}} </mat-cell>
</ng-container>
<!-- Location Column -->
<ng-container matColumnDef="location">
<mat-header-cell *matHeaderCellDef> Location </mat-header-cell>
<mat-cell *matCellDef="let element"> {{element.location}} </mat-cell>
</ng-container>
<!-- Client Dept ID Column -->
<ng-container matColumnDef="cdeptid">
<mat-header-cell *matHeaderCellDef> ClientDeptID </mat-header-cell>
<mat-cell *matCellDef="let element"> {{element.cdeptid}} </mat-cell>
</ng-container>
<!-- Dept Description Column -->
<ng-container matColumnDef="depdesc">
<mat-header-cell *matHeaderCellDef> Dept Description </mat-header-cell>
<mat-cell *matCellDef="let element"> {{element.depdesc}} </mat-cell>
</ng-container>
<mat-header-row *matHeaderRowDef="displayedColumns"></mat-header-row>
<mat-row *matRowDef="let row; columns: displayedColumns;"></mat-row>
</mat-table>
<mat-paginator #paginator
[pageSize]="10"
[pageSizeOptions]="[5, 10, 20]">
</mat-paginator>
</div>
</mat-card>
Run Code Online (Sandbox Code Playgroud)
import {Component, ViewChild} from '@angular/core';
import {MatPaginator, MatTableDataSource} from '@angular/material';
@Component({
selector: 'app-account',
templateUrl: './account.component.html',
styleUrls: ['./account.component.scss']
})
export class AccountComponent {
dept = [
'Administrative Computer',
'Agosta Laboratory',
'Allis Laboratory',
'Bargaman Laboratory',
'Bio-Imaging Resource Center',
'Capital Projects',
'Casanova Laboratory',
'Darst Laboratory',
'Darnell James Laboratory',
'Deans Office',
'Energy Consultant',
'Electronic Shop',
'Facilities Management',
'Field Laboratory'
];
displayedColumns = ['accno', 'accdesc', 'investigator', 'accCPC','location','cdeptid','depdesc'];
dataSource = new MatTableDataSource<Element>(ELEMENT_DATA);
@ViewChild(MatPaginator) paginator: MatPaginator;
ngAfterViewInit() {
this.dataSource.paginator = this.paginator;
}
}
export interface Element {
accno: number;
accdesc: string;
investigator: string;
accCPC: string;
location:string;
cdeptid: number;
depdesc: string;
}
const ELEMENT_DATA: Element[] = [
{accno: 5400343, accdesc: 'ASTRALIS LTD', investigator:'Kruger, James G.', accCPC: 'OR',location:'ON',cdeptid: 110350,depdesc: 'Kruger Laboratory'}
];
Run Code Online (Sandbox Code Playgroud)
有人可以帮我在应用程序中使用mat-select组件实现搜索过滤器吗?
Gor*_*nSu 21
HTML
<h4>mat-select</h4>
<mat-form-field>
<mat-label>State</mat-label>
<mat-select>
<input (keyup)="onKey($event.target.value)"> // **Send user input to TS**
<mat-option>None</mat-option>
<mat-option *ngFor="let state of selectedStates" [value]="state">{{state}}</mat-option>
</mat-select>
</mat-form-field>
Run Code Online (Sandbox Code Playgroud)
TS
states: string[] = [
'Alabama', 'Alaska', 'Arizona', 'Arkansas', 'California', 'Colorado', 'Connecticut', 'Delaware',
'Florida', 'Georgia', 'Hawaii', 'Idaho', 'Illinois', 'Indiana', 'Iowa', 'Kansas', 'Kentucky',
'Louisiana', 'Maine', 'Maryland', 'Massachusetts', 'Michigan', 'Minnesota', 'Mississippi',
'Missouri', 'Montana', 'Nebraska', 'Nevada', 'New Hampshire', 'New Jersey', 'New Mexico',
'New York', 'North Carolina', 'North Dakota', 'Ohio', 'Oklahoma', 'Oregon', 'Pennsylvania',
'Rhode Island', 'South Carolina', 'South Dakota', 'Tennessee', 'Texas', 'Utah', 'Vermont',
'Virginia', 'Washington', 'West Virginia', 'Wisconsin', 'Wyoming'
];
**// Initially fill the selectedStates so it can be used in the for loop**
selectedStates = this.states;
**// Receive user input and send to search method**
onKey(value) {
this.selectedStates = this.search(value);
}
**// Filter the states list and send back to populate the selectedStates**
search(value: string) {
let filter = value.toLowerCase();
return this.states.filter(option => option.toLowerCase().startsWith(filter));
}
Run Code Online (Sandbox Code Playgroud)
解决方法相当简单。应该像魅力一样工作:)
目前,您可以在以下位置使用 3rd 方组件mat-select:https :
//www.npmjs.com/package/ngx-mat-select-search
演示 ( https://stackblitz.com/github/bithost-gmbh/ngx-mat-select-search-example )
顺便提一句。这可能会在一些即将发布的 Angular Material 版本中得到支持。讨论已经开放:https : //github.com/angular/components/issues/5697
我找到了搜索下拉值的解决方案
这是html代码
<mat-select class="yourClass" [(ngModel)]="searchObj">
<input class="yourClass" placeholder ="search " (keyup)="onKey($event.target.value)">
<mat-option *ngIf="someCondition" [value]='Select'>Select</mat-option>
<mat-option *ngFor="let data of dataArray" [value]="data">{{data}}</mat-option>
</mat-select>
Run Code Online (Sandbox Code Playgroud)
这是获取输入值的打字稿代码键函数
onKey(value) {
this.dataArray= [];
this.selectSearch(value);
}
Run Code Online (Sandbox Code Playgroud)
在下拉列表中提供的值内执行搜索给定值
selectSearch(value:string){
let filter = value.toLowerCase();
for ( let i = 0 ; i < this.meta.data.length; i ++ ) {
let option = this.meta.data[i];
if ( option.name.toLowerCase().indexOf(filter) >= 0) {
this.dataArray.push( option );
}
}
}
Run Code Online (Sandbox Code Playgroud)
这个函数是你的主要搜索函数调用 api 并获取数据的地方
this.元数据
searchDpDropdown(){
for ( let i = 0 ; i < this.meta.data.length; i ++ ) {
this.dataArray.push( this.meta.data[i] );
}
}
Run Code Online (Sandbox Code Playgroud)
小智 0
只是搜索事件方法中的这段代码:
keyUp(data:any){
this.dataSource.filter= data.toLowerCase()
if(this.dataSource.paginator){
this.dataSource.paginator.firstPage()
}
}
Run Code Online (Sandbox Code Playgroud)