Combiner ui-sref and ng-disabled
Brancher le changement d'états ui-router sur des buttons
Lorsque l'on souhaite déclencher un changement d'état géré par ui-router depuis les templates HTML, la directive ui-sref
permet d'effectuer ce bond de manière déclarative :
<a ui-sref="company.profile">Fiche de la société</a>
Les avantages de la placer sur une balise de type <a>
sont que l'on conserve une certaine approche sémantique de la navigation (je souhaite me rendre sur telle "page") et que l'attribut href
est automatiquement généré si l'état a un URL de renseigné.
Cependant, si l'on souhaite rendre ce lien indisponible sous certaines conditions, la situation se complique et l'intention devient un peu moins claire :
<a ng-click="ctrl.go('company.profile')">Fiche de la société</a>
// dans le contrôleur associé // … this.go = function (state) { if (this.canAccess) $state.go(state); } // …
Dans ce cas de figure l'utilisation de balises <button>
peut être pertinente. Les versions récentes d'ui-router autorisent la dépose de ui-sref
sur tout élément cliquable.
Ainsi on peut tirer parti de la désactivation du bouton via ng-disabled
sans passer par l'emploi explicite de $state.go()
dans le contrôleur :
<button ui-sref="company.profile" ng-disabled="!ctrl.canAccess">Fiche de la société</button>
Cette technique est d'autant plus transparente que les frameworks CSS populaires de type Bootstrap permettent aisément de partager la même apparence entre boutons et liens pour la rédaction d'application.