2017-08-02 31 views
0

我:晓月活区不断重复对角2 ngIf验证

<div aria-live="polite" id="signInIdError" 
    *ngIf="!signInId.valid && (signInId.touched || isSubmitted)" 
    class="inline-validation critical"> 
    <p>{{ "FYPVERROR" | translate }}</p> 
</div> 

的问题是,当误差动态显示出来的字段校验,错误是读个不停,而不仅仅是一次。

如何使这项工作?我曾尝试将aria-live =“polite”以及aria-live =“polite”分配给div角色='区域',但似乎并不奏效。

+0

您的'* ngIf'可以简化为'!signInId.valid &&(signInId.touched || isSubmitted)'我认为 – 0mpurdy

+0

改变了,谢谢 –

+0

哪个浏览器?哪个屏幕阅读器?即使你什么也不做,反复地,但只有当你按下键或做某些事情时,你的意思是否真的重复?你有我们可以测试的页面吗? – QuentinC

回答

1

我很想知道原因,但还没有解决。

我怀疑角做的,在每个验证周期这三样东西的至少一个:

  • 从DOM删除元素,然后重新添加
  • 使元素不可见,可见再次
  • 清除元素的文本并再次填充它

使aria-live区域可见,在DOM中添加新区域或更新其内容都会触发辅助功能浏览器/操作系统的API,并使Jaws重新读取内容。没有其他原因,为什么大白鲨会突然变得疯狂,并且如果没有这些事件发生,反复阅读内容。

对于后者,您可能会使用aria-relavant属性,但Jaws并不能很好地支持它。无论如何,知道ngIf的本质,Angular可能是第一个,并且你不能阻止Jaws阅读一个新出现的活动区域(无论它是否被添加到DOM中或通过CSS显示可见),因为它会是违背住区的基本原则。

您可以尝试隐藏属性或CSS显示属性,而不是使用ngIf,但根据我上面的推理,我怀疑它会更好。

那么,接下来的问题是:

  • 如何验证,如果我的reasonning确实是正确的/什么角度不真的?
  • 如果我正确地猜测了Angular做了什么,我们如何防止它在不应该的情况下频繁地更新元素?

我还没有足够的经验来回答这两个问题。如果我有任何消息,我会更新这个答案。

+0

我认为你是对的,这很愚蠢 - 认为它会像添加活动区域一样简单, –