我正在尝试将ion-searchbar
重点放在按钮点击上,但它无效。
这是我的代码
打字稿
@ViewChild('search') search:ElementRef;
focusButton(){
console.log(this.search); //Searchbar {_config: Config, _elementRef: ElementRef, _renderer: RendererAdapter, _componentName: "searchbar", _mode: "md", …}
console.log(this.search.nativeElement); // null
this.search.nativeElement.focus(); // Cannot read property 'focus' of undefined
this.search.nativeElement.setFocus(); // Cannot read property 'setFocus' of undefined
}
HTML
<ion-searchbar #search (ionCancel)="cancelSearch($event)" [showCancelButton]="true" [(ngModel)]="artists"></ion-searchbar>
<ion-buttons end>
<button [hidden]="showSearch" (click)="(showSearch = !showSearch) && focusButton()" ion-button icon-only>
<ion-icon name="search"></ion-icon>
</button>
</ion-buttons>
控制台输出位于带代码的注释中。
答案 0 :(得分:6)
希望您可以使用以下代码执行此操作。只需使用setTimeout
进行尝试,如下所示。
html的
<ion-searchbar #search (ionCancel)="cancelSearch($event)"
[showCancelButton]="true" [(ngModel)]="artists"></ion-searchbar>
<ion-buttons end>
<button [hidden]="showSearch" (click)="(showSearch = !showSearch) && focusButton()" ion-button icon-only>
<ion-icon name="search"></ion-icon>
</button>
</ion-buttons>
.TS
@ViewChild('search') search : any;
focusButton(): void {
setTimeout(() => {
this.search.setFocus();
}, 500);
}
答案 1 :(得分:1)
在模板中添加引用
<input #inputEl>
或<ion-searchbar #inputEl>
用作 input
将ViewChild
导入 .ts 的顶部,并在组件 class
import { ViewChild } from '@angular/core';
@ViewChild('inputEl') inputElRef;
使用nativeElement
访问focus()
功能
this.inputElRef.nativeElement.focus();
答案 2 :(得分:1)
对于使用 Angular 8 和Ionic 4的用户,可以设置标志static: false
,该标志将考虑涉及*ngIf
并例如隐藏搜索栏。 *ngIf
再次显示视觉组件(例如ion-searchbar
)
@ViewChild('searchInput', {static: false}) searchInput: IonSearchbar;
constructor() { }
public setSearchbarVisible(isVisible) {
this.isSearchbarOpened = isVisible;
if (isVisible) {
setTimeout(() => {
this.searchInput.setFocus();
}, 100);
}
}
将类型添加到searchInput
还将有助于了解方法和属性,例如setFocus()
。那是整洁的代码,不敢触摸包装的本机元素。
答案 3 :(得分:1)
1-)导入IonSearchBar元素
import { IonSearchbar} from '@ionic/angular';
2-)为IonSearchBar创建ViewChild
@ViewChild(IonSearchbar) myInput: IonSearchbar;
3-)设置超时焦点
setTimeout(() => { this.myInput.setFocus(); }, 150);
-
此处打开请求功能: ion-searchbar autofocus #17745
最诚挚的问候。