Javascript Angular2-如何在从DOM中删除元素时放下焦点,并重新关注添加的新元素

Javascript Angular2-如何在从DOM中删除元素时放下焦点,并重新关注添加的新元素,javascript,angular,firefox,focus,accessibility,Javascript,Angular,Firefox,Focus,Accessibility,我使用*ngIf语句来打开和关闭手风琴元素中的面板。对于可访问性要求,当一个面板关闭(通过按下“继续”按钮移动到下一个)而下一个面板打开时,我需要将焦点放在一个上,该面板将宣布下一个面板的标题。屏幕阅读器(NVDA)确实读取文本,但在读取之前,它会读取四行我不希望看到的内容。(将网站标题替换为网站名称)其内容如下: 网站名称-Mozilla Firefox 不为人知 网站名称-Mozilla Firefox 网站名称-文件 最后,它将阅读下一节的标题。之所以这样做,是因为我有一些angula

我使用
*ngIf
语句来打开和关闭手风琴元素中的面板。对于可访问性要求,当一个面板关闭(通过按下“继续”按钮移动到下一个)而下一个面板打开时,我需要将焦点放在一个
上,该面板将宣布下一个面板的标题。屏幕阅读器(NVDA)确实读取文本,但在读取之前,它会读取四行我不希望看到的内容。(将网站标题替换为网站名称)其内容如下:

  • 网站名称-Mozilla Firefox
  • 不为人知
  • 网站名称-Mozilla Firefox
  • 网站名称-文件
最后,它将阅读下一节的标题。之所以这样做,是因为我有一些angular2折叠/展开动画正在打开/关闭面板。当动画发生时,它无法聚焦到下一个面板的
,因此被延迟,它会读取4行不需要的文本


我能想到的唯一解决办法是,当面板折叠时,我将焦点放在屏幕外的空div上,该div不会读取任何内容,然后在动画完成后将焦点重置到字幕上,但这似乎有点骇人。这个问题还有其他解决方案吗?

将查询放入组件中

 @Component({
   queries : {
      vc : new ng.core.ViewChildren('input') // depends on what you are adding dynamically, replace that with 'input'
   }
 })
在课堂上加上这个

 ngAfterViewInit: function() {

    this.vc.changes.subscribe(elements => {
       elements.last.nativeElement.focus();
    });

}