2017-08-02 32 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

我認爲你是對的,這很愚蠢 - 認爲它會像添加活動區域一樣簡單, –