【发布时间】:2019-01-23 07:09:42
【问题描述】:
我有以下指令:
import {Directive, ElementRef, Input, OnChanges, OnDestroy, Optional} from '@angular/core';
@Directive({
selector: '[appFocus]',
})
export class AppFocusDirective implements OnChanges {
@Input() appFocus: boolean = false;
@Input() focusDelay: number = 0;
constructor(private elementRef: ElementRef) {}
ngAfterViewChecked(){
this.checkFocus();
}
private checkFocus() {
if (this.appFocus && document.activeElement !== this.elementRef.nativeElement) {
let checkFocusTimeoutHandle: number;
const focus = () => {
this.elementRef.nativeElement.focus();
};
checkFocusTimeoutHandle = setTimeout(focus, this.focusDelay) as any;
}
}
}
其目的是在视图初始化后将焦点设置在元素上。我正在使用 ionic 构建我的应用程序,我需要对离子输入组件使用这种效果,但它似乎不起作用。但是,当我在本机输入元素上使用此指令时,它确实有效。
<!--doesn't get focused (when uncommented)-->
<!--<ion-input [appFocus]="true" ></ion-input>-->
<!--does get focused-->
<input [appFocus]="true" />
我必须改变什么才能使这项工作适用于 ion-item?
这是带有演示的STACKBLITZ。要使 focus() 效果起作用,必须通过其 DIRECT LINK 查看 stackblitz 应用程序。
【问题讨论】:
-
stackblitz 正在工作!
-
本机输入有效。如果您注释掉本机输入并取消注释 ion-input - 您会看到问题。
-
你想要达到的目标在 iOS 设备上是行不通的——苹果的立场是只有用户应该“创造”焦点。至少在现代 iOS Safari 中(10,3 左右之后)它现在不能通过 js 触发
-
@SergeyRudenko 感谢您的提醒!
标签: javascript html angular ionic-framework ionic3