J'essaie d'utiliser la fonctionnalité d'info-bulle d'angular-ui pour montrer à mon utilisateur qu'un champ particulier n'est pas valide, mais il semble que l'info-bulle ne peut être affichée que sur certains déclencheurs prédéfinis. Existe-t-il un moyen de déclencher l'info-bulle, à l'exception de ces déclencheurs?
Par exemple:
<input
type="text"
tooltip="Invalid name!"
tooltip-position="right"
tooltip-trigger="myForm.username.$invalid">
Voici un truc.
Twitter info-bulles d'amorçage (sur lequel Angular-UI s'appuie) a une option pour spécifier l'événement déclencheur avec un attribut supplémentaire, comme dans data-trigger="mouseenter"
. Cela vous permet de modifier le déclencheur par programmation (avec Angular):
<input
ng-model="user.username"
name="username"
tooltip="Some text"
tooltip-trigger="{{{true: 'mouseenter', false: 'never'}[myForm.username.$invalid]}}"
/>
Donc, quand username
est $ invalide, le tooltip-trigger
expression sera évaluée à 'mouseenter'
et l'info-bulle apparaîtra. Sinon, le déclencheur sera évalué à 'never'
qui, en retour, ne déclenche pas l'info-bulle.
MODIFIER:
@cotten (dans les commentaires) mentionne un scénario dans lequel l'infobulle reste bloquée et ne disparaîtra pas, même si le modèle est valide. Cela se produit lorsque la souris reste sur le champ de saisie pendant la saisie du texte (et que le modèle devient valide). Dès que la validation du modèle est évaluée à true, le tooltip-trigger
will basculer sur "jamais".
UI Bootstrap utilise un soi-disant triggerMap
pour déterminer sur quels événements de souris afficher/masquer l'info-bulle.
// Default hide triggers for each show trigger
var triggerMap = {
'mouseenter': 'mouseleave',
'click': 'click',
'focus': 'blur'
};
Comme vous le voyez peut-être, cette carte ne connaît rien de l'événement "jamais". Il est donc impossible de déterminer quand fermer l'info-bulle. Donc, pour bien jouer aux figures, il suffit de mettre à jour cette carte avec notre propre paire d’événements et notre interface utilisateur Bootstrap saura alors quel événement observer pour fermer l’info-bulle lorsque tooltip-trigger
est réglé sur "jamais".
app.config(['$tooltipProvider', function($tooltipProvider){
$tooltipProvider.setTriggers({
'mouseenter': 'mouseleave',
'click': 'click',
'focus': 'blur',
'never': 'mouseleave' // <- This ensures the tooltip will go away on mouseleave
});
}]);
Remarque: Le fournisseur $ tooltip est exposé par le module "ui.bootstrap.tooltip" et nous permet de configurer globalement nos info-bulles dans la configuration de l'application.
J'ai essayé quelque chose de différent
tooltip="{{(myForm.input1id.$invalid) ? 'You have an error with this field' : ''}}"
De cette façon, mon info-bulle n'a quelque chose d'écrit que lorsque l'entrée est invalide, et si rien n'a été écrit, l'info-bulle ne s'affiche pas.
À partir de la version 0.12.0, tooltip-tigger
n'est plus observable (vous ne pouvez donc pas le modifier par programme).
Vous pouvez utiliser tooltip-enable
pour avoir le même comportement. Voir plus de détails ici: https://github.com/angular-ui/bootstrap/issues/3372
Vous pouvez également ajouter le tooltip-enable
à la place du tooltip-trigger
sur votre terrain.
<input
type="text"
tooltip="Invalid name!"
tooltip-position="right"
tooltip-enable="{{myForm.username.$invalid}}">
Dans ce cas, si le nom d'utilisateur n'est pas valide ($ invalid renvoie true
), l'info-bulle apparaîtra.
Selon la nouvelle version du document, je suggérerai d'utiliser le code HTML ci-dessous. la réponse de stewie n'est pas utile avec la dernière version.
<input class="form-control" name="name" type="text" required ng-model="name"
uib-tooltip="name required" tooltip-is-open="formname.name.$invalid"
tooltip-trigger="none" tooltip-placement="auto top" />
Remplacez simplement le nom de votre formulaire dans tooltip-is-open="formname.name.$invalid"
tu es prêt.