【问题标题】:Vue.js: Use aria-controls with conditional rendering in vue.jsVue.js:在 vue.js 中使用带有条件渲染的 aria-controls
【发布时间】:2018-09-25 16:56:33
【问题描述】:

我有两个按钮可以在屏幕上切换一些附加信息。 我为按钮添加了aria-controls 属性,并为信息框渲染了id

现在我在验证 html 时仍然遇到错误,因为只有当 vuex 存储中的变量为 true 时,我才会显示此信息框。 我用v-if 渲染它。

这意味着如果未单击该按钮,则该元素不在 DOM 中,因此缺少相应的 id,我会收到错误消息。

我尝试使用v-show,因为这只会隐藏它。

但这仍然只会呈现一个信息框而不是 2 个。

获得此权利的唯一方法是在模板中创建两个信息框并将v-show 添加到两者中吗?或者有没有更好的方法来使用aria-controls

感谢您的帮助

最好的


编辑:

这些是我的带有 aria-controls 的按钮。

<template>
  <div>
    <ul v-if="nav.items">
      <li
        v-for="(item, key) in nav.items"
        @keyup.esc="closeInfoBox">
          <button to="" aria-controls="item.name" aria-expanded="false">Designathon</button>
      </li>
    </ul>
  </div>
</template>

这是我的信息框组件:

<template>
  <div class="Infobox" v-if="infoboxOpen" id="//should correspond to aria controls">
    <span v-html="infoContent">Some content</span>
  </div>
</template>

仅当 infoboxOpen === true (来自 vuex 商店)并且内容根据按下的按钮而被替换时才会显示。 (我省略了其中的一些内容,以使代码更易于理解并在这里专注于我的问题)。

这是我可以用v-show 替换v-if 的地方,但这仍然只会呈现一个内容。而且我希望它尽可能动态,因为用户可以在后端添加更多信息框...

希望这有助于理解我的问题。

【问题讨论】:

  • 显示代码。仅通过文字描述几乎不可能理解它。

标签: javascript vue.js conditional accessibility vuex


【解决方案1】:

您快到了,只需使用
:aria-controls="infoboxOpen ? item.name : ''"aria-controls 设为动态属性:

<template>
  <div>
    <ul v-if="nav.items">
      <li
        v-for="(item, key) in nav.items"
        @keyup.esc="closeInfoBox">
          <button to="" :aria-controls="infoboxOpen ? item.name : ''" aria-expanded="false">Designathon</button>
      </li>
    </ul>
  </div>
</template>

【讨论】:

  • 嗯好吧。这似乎没问题。但这不妨碍 ARIA 部分吗?我的意思是,如果没有打开它,我没有任何信息,这个按钮确实控制任何 aria 元素。也许我对 aria-controls 以及何时使用它们的了解不够,但是......是的。你知道吗?
  • 这是一个有效的问题,但我不是能回答的人。
  • aria-controls 是一个关系属性,应该与它“控制”的元素的 id 属性相同。 aria-expanded 属性应该是动态的,并且根据切换元素是否“展开”设置为 true 或 false。
猜你喜欢
  • 2016-02-07
  • 2019-08-07
  • 2016-12-01
  • 2017-08-21
  • 1970-01-01
  • 2020-11-15
  • 1970-01-01
  • 2017-12-10
  • 2017-09-10
相关资源
最近更新 更多