Ionic v4 - 如何自动对焦输入?
Ionic v4 - how do I autofocus on a Input?
我有一个输入视图 <ion-input #codigobarras></ion-input>
如何自动聚焦于此输入?
我尝试了什么
@ViewChild('codigobarras') input_codigobarras: Input;
...
ionViewDidEnter() {
this.input_codigobarras.focus(); // didn't work = temp2.focus is not a function
this.input_codigobarras.focus.emit(); // didn't work = do nothing, just returns undefined
this.input_codigobarras.getElementRef().nativeElement.focus() // didn't work = do nothing, just returns undefined
this.input_codigobarras.setFocus(); // didn't work = do nothing, just returns undefined
}
<ion-input [autofocus]></ion-input> <!-- Didn't work -->
这应该有效
<ion-input autofocus="true"></ion-input>
加载项目后,您可以尝试使用 ngOnChanges() 触发 ElementRef
@ViewChild('test') test: ElementRef;
ngOnChanges(changes: SimpleChanges){
if(changes.items) {
this.test.nativeElement.firstChild['autofocus'] = 'true';
}
}
和你的html
<div #test>
<ion-input ></ion-input>
</div>
一个更通用的解决方案可以在您需要的时间和地点执行此操作:
<ion-input ... #inputId></ion-input>
因此,在您的控制器中使用 ViewChild
,您可以轻松地将焦点设置在:
@ViewChild('inputId', {static: false}) ionInput: { setFocus: () => void; };
...
setFocusOnInput() {
this.ionInput.setFocus();
}
离子 4/5
HTML
<ion-input ... #inputId></ion-input>
TS
export class SomePage {
....
@ViewChild('inputId', {static: false}) inputEl: IonInput;
....
focusOnElement() {
this.tipDesc.setFocus();
}
离子 3
@ViewChild('inputId') inputEl: TextInput;
当你想专注于输入时调用 focusOnElement()
关于离子模态内的离子输入,我有一个焦点冲突。事实上,在使用超时后,我意识到我的离子输入是聚焦的,并且瞬间没有聚焦。
setTimeout(() => this.ionInput.setFocus(), 100);
因此,我使用控制台记录 activeElement(重点关注的那个):
document.activeElement
并且控制台输出 ion-modal。
因此,我必须等待 ion-modal 被“完全加载”才能使用 setFocus,如上所述。
我有一个输入视图 <ion-input #codigobarras></ion-input>
如何自动聚焦于此输入?
我尝试了什么
@ViewChild('codigobarras') input_codigobarras: Input;
...
ionViewDidEnter() {
this.input_codigobarras.focus(); // didn't work = temp2.focus is not a function
this.input_codigobarras.focus.emit(); // didn't work = do nothing, just returns undefined
this.input_codigobarras.getElementRef().nativeElement.focus() // didn't work = do nothing, just returns undefined
this.input_codigobarras.setFocus(); // didn't work = do nothing, just returns undefined
}
<ion-input [autofocus]></ion-input> <!-- Didn't work -->
这应该有效
<ion-input autofocus="true"></ion-input>
加载项目后,您可以尝试使用 ngOnChanges() 触发 ElementRef
@ViewChild('test') test: ElementRef;
ngOnChanges(changes: SimpleChanges){
if(changes.items) {
this.test.nativeElement.firstChild['autofocus'] = 'true';
}
}
和你的html
<div #test>
<ion-input ></ion-input>
</div>
一个更通用的解决方案可以在您需要的时间和地点执行此操作:
<ion-input ... #inputId></ion-input>
因此,在您的控制器中使用 ViewChild
,您可以轻松地将焦点设置在:
@ViewChild('inputId', {static: false}) ionInput: { setFocus: () => void; };
...
setFocusOnInput() {
this.ionInput.setFocus();
}
离子 4/5
HTML
<ion-input ... #inputId></ion-input>
TS
export class SomePage {
....
@ViewChild('inputId', {static: false}) inputEl: IonInput;
....
focusOnElement() {
this.tipDesc.setFocus();
}
离子 3
@ViewChild('inputId') inputEl: TextInput;
当你想专注于输入时调用 focusOnElement()
关于离子模态内的离子输入,我有一个焦点冲突。事实上,在使用超时后,我意识到我的离子输入是聚焦的,并且瞬间没有聚焦。
setTimeout(() => this.ionInput.setFocus(), 100);
因此,我使用控制台记录 activeElement(重点关注的那个):
document.activeElement
并且控制台输出 ion-modal。
因此,我必须等待 ion-modal 被“完全加载”才能使用 setFocus,如上所述。