SlideShare a Scribd company logo
AngularJS: Accessibility
Accessibilità
Molte persone nel mondo dipendono da tecnologie
assistive, come:
● screen reader;
● modalità ad alto contrasto;
● supporto per la tastiera braille;
● ...
Accessibiità
Per comunicare agli screen reader cosa fare bisogna usare
gli attributi ARIA.
Inoltre uno dei requisiti di validazione è la piena compliance
con la grammatica di HTML 4/5
Problema con Angularjs
<some-checkbox ng-model="checked" ng-
disabled="isDisabled">
Custom Checkbox
</some-checkbox>
1) Inaccessibile perché non cumunica
niente alle tecnologie assistive
2) Usa un tag non riconosciuto
Cosa serve per renderlo accessibile?
1. aggiungere gli attributi aria;
2. eliminare il tag custom;
3. renderlo w3c compliant.
Attributi ARIA con Angularjs
Dalla versione 1.3 angular viene in nostro soccorso con il
servizio ngAria.
Cosa fa? aggiunge le proprietà ARIA
Importare ngAria
Usare ngAria è semplice:
● importazione della lib angular-aria.js
● angular.module('myApp', [‘ngAria’]);
ngAria
L'obiettivo di ngAria è quello di migliorare l'accessibilità di
Angular.js consentendo l’uso di attributi comuni ARIA
anche sulle direttive.
Attualmente non tutti gli elementi sono supportati.
ngAria - direttive
● ngModel
● ngShow
● ngHide
● ngDisabled
● ngClick
● ngDblclick
● ngMessages
ng-model
E’ di sicuro la direttiva più usata. Lega elementi del modello a:
● checkbox
● radio
● range
● text
● ...
ngAria aggiorna automaticamente agli elementi precedenti le prop.:
● aria-checked
● aria-valuemin e aria-valuemax
● aria-valuenow
● aria-invalid
● aria-required
ng-model
<some-checkbox role="checkbox" ng-model="checked" ng-disabled="isDisabled" aria-label="Custom Checkbox">
<span class="icon" aria-hidden="true"></span>
Custom Checkbox
</some-checkbox>
Proprietà:
"role": "checkbox",
"ng-model": "checked",
"aria-label": "Custom Checkbox",
"tabindex": "0",
"aria-disabled": "false",
"aria-checked": "false",
"aria-invalid": "false"
...
ng-disabled
<md-checkbox ng-disabled="disabled">
<md-checkbox ng-disabled="disabled" aria-disabled="true">
Con ngAria
ngShow & ngHide
<div ng-show="true"></div>
<div ng-show="true" aria-hidden="false"></div>
Con ngAria
Non ha senso per un uso classico perché ng-show mostra o meno di suo gli elementi interni ad uno
screen reader.
Diventa più sensato se un CSS lo sovrascrive.
<div ng-show="false" class="ng-hide" aria-hidden="true"></div>.ng-hide {
display: block;
opacity: 0;
} <div ng-show="true" aria-hidden="false"></div>
Diventa
ngClick & ngDblclick
<input type=”button” ng-click="myMethod()"></input>
<input type=”button” ng-click="myMethod()" tabindex=0></input>
Con ngAria
ngMessages
<div ng-messages="myForm.myName.$error">
<div ng-message="required">You did not enter a field</div>
<div ng-message="maxlength">Your field is too long</div>
</div>
<div ng-messages="myForm.myName.$error" aria-live="assertive">
<div ng-message="required">You did not enter a field</div>
<div ng-message="maxlength">Your field is too long</div>
</div>
Con ngAria
Disabilitare attributi
Gli attributi di ngAria non sono adatti ad ogni scenario,
quindi Angularjs da la possibilità di disattivarli
angular.module('myApp', ['ngAria'], function config($ariaProvider) {
$ariaProvider.config({
tabindex: false
});
});
E per le direttive custom?
● ngAria
● opzione “replace”
Usare i data-attribute
Per soddisfare le specifiche W3C usare i data-
attribute
ng-model -> data-ng-model

More Related Content

PDF
AngularJS-Intro
Vittorio Conte
 
PDF
Workshop Ideare e creare Web Applications, Introduzione ad AngularJS
Giovanni Buffa
 
PPTX
AngularJS 2.0
Vittorio Conte
 
PDF
Angularjs
Francesco Portus
 
PPTX
Angular js: routing
Vittorio Conte
 
PPTX
CommitUniversity AngularJSAdvanced Andrea Vallotti
Commit University
 
PPTX
AngularJS: server communication
Vittorio Conte
 
PDF
Workshop angular
Emidio Croci
 
AngularJS-Intro
Vittorio Conte
 
Workshop Ideare e creare Web Applications, Introduzione ad AngularJS
Giovanni Buffa
 
AngularJS 2.0
Vittorio Conte
 
Angularjs
Francesco Portus
 
Angular js: routing
Vittorio Conte
 
CommitUniversity AngularJSAdvanced Andrea Vallotti
Commit University
 
AngularJS: server communication
Vittorio Conte
 
Workshop angular
Emidio Croci
 

What's hot (20)

PDF
ModulAngular
extrategy
 
PPTX
Slide typescript - net campus
DotNetCampus
 
PPTX
AngularJS – Reinventare le applicazioni web
Luca Milan
 
ODP
Corso angular js material
Beniamino Ferrari
 
PPTX
Migliora il tuo codice con knockout.js
Andrea Dottor
 
PPTX
Asp.net 4 Community Tour VS2010
Fabrizio Bernabei
 
PPSX
Asp.Net MVC 3 - Il Model View Controller secondo Microsoft
Stefano Benedetti
 
ODP
Corso angular js base
Beniamino Ferrari
 
ODP
Corso angular js componenti
Beniamino Ferrari
 
PDF
Vue.js
Ilaria Franchini
 
PDF
Tech Webinar: Test e2e per AngularJS e non solo
Codemotion
 
PDF
Applicazioni Web ultra-performanti con Vue.js e Delphi
Marco Breveglieri
 
PDF
Tech Webinar: Advanced AngularJS, tecniche avanzate per padroneggiare il fram...
Codemotion
 
KEY
Android Widget @ whymca 2011
Fabio Collini
 
PDF
Training Signal Webtrends
Stefano Iaboni
 
PDF
Blazor: are we ready for the launch?
Andrea Agnoletto
 
PPTX
Cosa c'è di nuovo in asp.net core 2 0
Andrea Dottor
 
PDF
Zend Framework Workshop Parte1
massimiliano.wosz
 
PDF
Sviluppo Web con React e Delphi - Seminario Delphi Day 2016, Piacenza
Marco Breveglieri
 
PPTX
Asp.Net MVC 5
Emanuele Bartolesi
 
ModulAngular
extrategy
 
Slide typescript - net campus
DotNetCampus
 
AngularJS – Reinventare le applicazioni web
Luca Milan
 
Corso angular js material
Beniamino Ferrari
 
Migliora il tuo codice con knockout.js
Andrea Dottor
 
Asp.net 4 Community Tour VS2010
Fabrizio Bernabei
 
Asp.Net MVC 3 - Il Model View Controller secondo Microsoft
Stefano Benedetti
 
Corso angular js base
Beniamino Ferrari
 
Corso angular js componenti
Beniamino Ferrari
 
Tech Webinar: Test e2e per AngularJS e non solo
Codemotion
 
Applicazioni Web ultra-performanti con Vue.js e Delphi
Marco Breveglieri
 
Tech Webinar: Advanced AngularJS, tecniche avanzate per padroneggiare il fram...
Codemotion
 
Android Widget @ whymca 2011
Fabio Collini
 
Training Signal Webtrends
Stefano Iaboni
 
Blazor: are we ready for the launch?
Andrea Agnoletto
 
Cosa c'è di nuovo in asp.net core 2 0
Andrea Dottor
 
Zend Framework Workshop Parte1
massimiliano.wosz
 
Sviluppo Web con React e Delphi - Seminario Delphi Day 2016, Piacenza
Marco Breveglieri
 
Asp.Net MVC 5
Emanuele Bartolesi
 
Ad

AngularJS: accessibility

  • 2. Accessibilità Molte persone nel mondo dipendono da tecnologie assistive, come: ● screen reader; ● modalità ad alto contrasto; ● supporto per la tastiera braille; ● ...
  • 3. Accessibiità Per comunicare agli screen reader cosa fare bisogna usare gli attributi ARIA. Inoltre uno dei requisiti di validazione è la piena compliance con la grammatica di HTML 4/5
  • 4. Problema con Angularjs <some-checkbox ng-model="checked" ng- disabled="isDisabled"> Custom Checkbox </some-checkbox> 1) Inaccessibile perché non cumunica niente alle tecnologie assistive 2) Usa un tag non riconosciuto
  • 5. Cosa serve per renderlo accessibile? 1. aggiungere gli attributi aria; 2. eliminare il tag custom; 3. renderlo w3c compliant.
  • 6. Attributi ARIA con Angularjs Dalla versione 1.3 angular viene in nostro soccorso con il servizio ngAria. Cosa fa? aggiunge le proprietà ARIA
  • 7. Importare ngAria Usare ngAria è semplice: ● importazione della lib angular-aria.js ● angular.module('myApp', [‘ngAria’]);
  • 8. ngAria L'obiettivo di ngAria è quello di migliorare l'accessibilità di Angular.js consentendo l’uso di attributi comuni ARIA anche sulle direttive. Attualmente non tutti gli elementi sono supportati.
  • 9. ngAria - direttive ● ngModel ● ngShow ● ngHide ● ngDisabled ● ngClick ● ngDblclick ● ngMessages
  • 10. ng-model E’ di sicuro la direttiva più usata. Lega elementi del modello a: ● checkbox ● radio ● range ● text ● ... ngAria aggiorna automaticamente agli elementi precedenti le prop.: ● aria-checked ● aria-valuemin e aria-valuemax ● aria-valuenow ● aria-invalid ● aria-required
  • 11. ng-model <some-checkbox role="checkbox" ng-model="checked" ng-disabled="isDisabled" aria-label="Custom Checkbox"> <span class="icon" aria-hidden="true"></span> Custom Checkbox </some-checkbox> Proprietà: "role": "checkbox", "ng-model": "checked", "aria-label": "Custom Checkbox", "tabindex": "0", "aria-disabled": "false", "aria-checked": "false", "aria-invalid": "false" ...
  • 13. ngShow & ngHide <div ng-show="true"></div> <div ng-show="true" aria-hidden="false"></div> Con ngAria Non ha senso per un uso classico perché ng-show mostra o meno di suo gli elementi interni ad uno screen reader. Diventa più sensato se un CSS lo sovrascrive. <div ng-show="false" class="ng-hide" aria-hidden="true"></div>.ng-hide { display: block; opacity: 0; } <div ng-show="true" aria-hidden="false"></div> Diventa
  • 14. ngClick & ngDblclick <input type=”button” ng-click="myMethod()"></input> <input type=”button” ng-click="myMethod()" tabindex=0></input> Con ngAria
  • 15. ngMessages <div ng-messages="myForm.myName.$error"> <div ng-message="required">You did not enter a field</div> <div ng-message="maxlength">Your field is too long</div> </div> <div ng-messages="myForm.myName.$error" aria-live="assertive"> <div ng-message="required">You did not enter a field</div> <div ng-message="maxlength">Your field is too long</div> </div> Con ngAria
  • 16. Disabilitare attributi Gli attributi di ngAria non sono adatti ad ogni scenario, quindi Angularjs da la possibilità di disattivarli angular.module('myApp', ['ngAria'], function config($ariaProvider) { $ariaProvider.config({ tabindex: false }); });
  • 17. E per le direttive custom? ● ngAria ● opzione “replace”
  • 18. Usare i data-attribute Per soddisfare le specifiche W3C usare i data- attribute ng-model -> data-ng-model

Editor's Notes

  • #7: In generale molti framework js contribuiscono ad avere siti poco accessibili
  • #14: Nel secondo caso ngAria evita che venga dato il focus a elementi misteriosi
  • #15: aggiunge tabindex=0
  • #16: aria-live=”assertive” indica allo screen reader di leggere il msg ad alta voce