How to bind dynamic data to aria-label?

HtmlAngularWai AriaUiaccessibility

Html Problem Overview


I have dynamic text to bind to aria-label on a HTML page. This is an Angular 2 app. I am using something like this:

aria-label="Product details for {{productDetails?.ProductName}}"

But I get an error:

> Can't bind to 'aria-label' since it isn't a known property of 'div'.

Is there any workaround for this?

Html Solutions


Solution 1 - Html

Just use attr. before aria-label:

attr.aria-label="Product details for {{productDetails?.ProductName}}"

or

[attr.aria-label]="'Product details for ' + productDetails?.ProductName"

Examples here: https://stackblitz.com/edit/angular-aria-label?embed=1&file=src/app/app.component.html&hideExplorer=1

Ps. As @Simon_Weaver mentioned, there are some components that implements its own aria-label @Input, like mat-select.

See his answer here https://stackoverflow.com/questions/56690162/angular-material-mat-label-accessibility/59586917#59586917

Solution 2 - Html

You should use square brackets ([ ]) around the target property:

[attr.aria-label]="'Product details for' + productDetails?.ProductName"

Solution 3 - Html

Also this could be further checked if ProductName in productDetails is null or undefined as

[attr.aria-label]="(typeof productDetails.ProductName !== 'undefined') ? 
'Product details for ' + productDetails.ProductName : '' "

So that the JAWS/NVDA/Narrator could able to read if it's value is present or not..

Solution 4 - Html

this works for me without [].

attr.aria-labelledby="navbarDropdownMenuLink{{ i }}"

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionnamrataView Question on Stackoverflow
Solution 1 - HtmlBruno JoãoView Answer on Stackoverflow
Solution 2 - HtmlKabb5View Answer on Stackoverflow
Solution 3 - HtmlNɪsʜᴀɴᴛʜ ॐView Answer on Stackoverflow
Solution 4 - HtmlMMGuzView Answer on Stackoverflow