2013-05-20 6 views
58

Ich versuche, easy-Tooltip-Funktionalität zu verwenden, um meinen Benutzer anzuzeigen, dass ein bestimmtes Feld ungültig ist, aber es scheint, dass der Tooltipp nur auf einige vordefinierte Trigger angezeigt werden kann. Gibt es eine Möglichkeit, den Tooltip mit Ausnahme dieser Trigger auszulösen?Aktivieren Sie angular-ui Tooltip für benutzerdefinierte Ereignisse

Zum Beispiel:

<input 
    type="text" 
    tooltip="Invalid name!" 
    tooltip-position="right" 
    tooltip-trigger="myForm.username.$invalid"> 
+1

[QuantumUI-Tooltip] (http://angularui.net/) von ** angularui.net ** hat einige flexiblere Optionen. –

Antwort

107

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.

+7

Diese Antwort sollte akzeptiert werden und das Beispiel wird wirklich zur Tooltip-Detailseite hinzugefügt. – vittore

+0

Ich kann das nicht zur Arbeit bringen. Bitte beachten Sie: http://jsbin.com/esecet/1/edit. Wenn das Formular gültig ist, wird die QuickInfo nicht gelöscht ... – Cotten

+1

Hier ist eine funktionierende Version: http://jsbin.com/Ekeset/2/edit – Stewie

32

habe ich versucht, etwas anderes

tooltip="{{(myForm.input1id.$invalid) ? 'You have an error with this field' : ''}}" 

Auf diese Weise nur meine Tooltip wurde, etwas geschrieben, wenn die Eingabe ungültig ist und wenn es nicht etwas geschrieben hat, wird der Tooltip nicht.

+0

Dies funktioniert sehr gut, wenn Sie es mit dem richtigen Popover-Trigger-Ereignis paaren. Zum Beispiel validiere ich bei einer Texteingabe, so dass das Keyup selbst dann das Popup dazu zwingt, bei jedem Keyup-Event neu zu bewerten. Ich habe zuerst "Fokus" versucht, aber dann erschien die Fehlermeldung nur, wenn ich ausklickte, dann in das Element. '' ' '' ' – nomis

3

Sie können auch die tooltip-enable anstelle der tooltip-trigger auf Ihrem Feld hinzufügen.

<input 
    type="text" 
    tooltip="Invalid name!" 
    tooltip-position="right" 
    tooltip-enable="{{myForm.username.$invalid}}"> 

In diesem Fall, wenn der Benutzername ungültig ist ($ ungültig kehrt true) die Tooltip angezeigt.

+0

Dies ist so viel einfacher und lesbarer als die akzeptierte Antwort, und auch näher an OP ursprünglichen Code – daniero

0

Wie in der neuen Version Dokument werde ich vorschlagen, unter HTML zu verwenden. stewies Antwort ist nicht hilfreich mit der neuesten 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" /> 

Ersetzen Sie einfach Ihre Formularnamen in tooltip-is-open="formname.name.$invalid"

Sie sind gut zu gehen.

Verwandte Themen