Focusdirective并没有特殊的实现,同其父类Lockdirective相比只是把selector暴露出来而已:
三个依赖:
- elementRef: 施加Directive的DOM元素
- service: keyboardFocusService
- renderer: Renderer2
再看其父类LockDirective的实现。
有一个默认的配置defaultConfig:
当host元素有事件发生时,触发@HostListener修饰的handleEnter方法:
unlock意味着tabindex为0, 即focus首先落在的位置。
lock实现就是把元素的tabindex设为-1:
注意这里调用注入的renderer给HTML元素设置focus_group_attr属性:
shouldAutofocus返回值取决于this.config.autofocus的配置:
这里并没有看到自动设置元素focus的代码:
单击上图第157行代码,进入AutoFocusDirective的实现:
这里调用了元素的focus方法实现focus.
更多Jerry的原创文章,尽在:“汪子熙”: