[英]Angular mat-autocomplete with highlight pipe issue
我有一種情況,我正在使用帶有自定義突出顯示 pipe 的 mat-autocomplete。 一切正常,當我 select 來自自動完成的值然后我嘗試重置表單時,問題出現了,表單正在重置,但自動完成中的值仍然突出顯示。
highlight.pipe.ts
transform(text: string, search): string {
const pattern = search
.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&")
.split(' ')
.filter(t => t.length > 0)
.join('|');
const regex = new RegExp(pattern, 'gi');
return search ? text.replace(regex, match => `<b>${match}</b>`) : text;
}
組件.html
<form class="example-form">
<mat-form-field class="example-full-width">
<input matInput placeholder="State" aria-label="State" [matAutocomplete]="auto" [formControl]="stateCtrl">
<mat-autocomplete #auto="matAutocomplete">
<mat-option *ngFor="let state of filteredStates | async" [value]="state.name">
<span [innerHTML]="state.name | highLight: toHighlight"></span>
<span></span>
</mat-option>
</mat-autocomplete>
</mat-form-field>
</form>
單擊重置時,我不希望突出顯示任何值。 有什么辦法可以解決這個問題。
提前致謝
您必須在重置 function 中再次重置 toHighlight='' ......但是您遇到了另一個煩人的小問題,刪除您輸入的內容后,即使該字段為空,它仍然會記住最后一個字符並突出顯示它..所以你現在的解決方案是總是重置表格,但你必須努力
您可以將多個 arguments 傳遞給 pipe,因此您可以傳遞stateCtrl
的值,並將其添加到您的條件中以檢查是否也存在該值:
<span [innerHTML]="state.name | highLight: toHighlight : stateCtrl.value"></span>
然后對該值進行額外檢查:
transform(text: string, search: string, ctrlValue: string): string {
// ....
return (search && ctrlValue) ? text.replace(regex, match => `<b>${match}</b>`) : text;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.