我正在使用Angular 2 Material,我在sidenav组件中导航时出现问题。每当我打开sidenav时,它会自动将焦点设置到第一个md-button
项目,并且在我点击屏幕上的某个位置之前不会消失。
这是一个例子:https://plnkr.co/edit/pNv9Bx4o1qQSF2bpOqyM?p=preview
我尝试将focus()
设置为sidenav.open()
事件上的另一个元素,但会出现闪烁效果一秒钟。
是否有任何选项或属性可以将此初始焦点禁用到第一个菜单项?
答案 0 :(得分:10)
答案 1 :(得分:7)
编辑这已在材料库中解决,请参阅@Smiter的答案。
因此,在md-sidenav
时,这似乎是mode='side'
的错误。在GitHub上打开了一些问题(OP,我看到你提交了自己的问题;很好的工作)。玩弄它,似乎它实际上与锚标签上的md-button
指令有关。只要<a>
仍然存在,用<button>
替换md-button
标签也无法解决问题。作为进一步的证据,从第一个md-button
标记中删除<a>
会导致第二个列表项(带有md-button
的第一个元素)以这种方式突出显示自己。
无论如何,我认为解决这个问题的最佳方法是在我们收到Angular团队的消息之前采取一种解决方法。我能够通过在列表中首先添加一个md-button
的隐藏列表项来修复该行为:
<md-sidenav #sidenav class="example-sidenav">
<a md-button style="height: 0; position: absolute;"> <!-- 'absorbs' the behavior -->
</a>
<md-list>
<md-list-item>
<a (click)="sidenav.close()" md-button>
<md-icon>directions_car</md-icon>
</a>
</md-list-item>
......
</md-list>
</md-sidenav>
请注意,我们无法在虚拟元素上设置display: none
;该指令会忽略它。只需使用height: 0
或类似的东西。我还设置了position: absolute
,因此它没有弄乱其他元素的位置。