Hier ist ein Trick.
Twitter Bootstrap tooltips (auf die Angular-UI angewiesen ist) kann das Triggerereignis mit einem zusätzlichen Attribut wie in angeben. Dies gibt Ihnen eine Möglichkeit, den Auslöser programmatisch ändern (mit kantigem):
<input
ng-model="user.username"
name="username"
tooltip="Some text"
tooltip-trigger="{{{true: 'mouseenter', false: 'never'}[myForm.username.$invalid]}}"
/>
Also, wenn username
$ ungültig ist, die tooltip-trigger
Ausdruck 'mouseenter'
auswertet und Tooltip wird sich zeigen. Andernfalls wird der Trigger auf 'never'
ausgewertet, wodurch der Tooltip nicht ausgelöst wird.
EDIT:
@cotten (in den Kommentaren) erwähnt ein Szenario, in dem Tooltip stecken bleibt und wird nicht verschwinden, auch wenn das Modell gültig ist. Dies passiert, wenn die Maus während der Texteingabe über dem Eingabefeld bleibt (und das Modell wird gültig). Sobald die Modellvalidierung als wahr ausgewertet wird, wird tooltip-trigger
auf "nie" wechseln.
UI Bootstrap verwendet eine so genannte triggerMap
, um zu ermitteln, auf welchen Mausereignissen die QuickInfo ein-/ausgeblendet wird.
// Default hide triggers for each show trigger
var triggerMap = {
'mouseenter': 'mouseleave',
'click': 'click',
'focus': 'blur'
};
Wie Sie sehen können, diese Karte weiß nichts über die „nie“ Ereignis, es ist also nicht in der Lage zu bestimmen, wann der Tooltip zu schließen. Um das Trickspiel gut zu sehen, müssen wir diese Map nur mit unserem eigenen Event-Paar aktualisieren und UI Bootstrap wird dann wissen, welches Ereignis beim Schließen des Tooltips zu beobachten ist, wenn tooltip-trigger
auf "nie" eingestellt ist.
app.config(['$tooltipProvider', function($tooltipProvider){
$tooltipProvider.setTriggers({
'mouseenter': 'mouseleave',
'click': 'click',
'focus': 'blur',
'never': 'mouseleave' // <- This ensures the tooltip will go away on mouseleave
});
}]);
PLUNKER
Hinweis: $ Tooltip-Anbieter von dem "ui.bootstrap.tooltip" Modul ausgesetzt ist und es erlaubt uns, unsere Tooltips in App-Konfiguration global konfigurieren.
[QuantumUI-Tooltip] (http://angularui.net/) von ** angularui.net ** hat einige flexiblere Optionen. –