Включить подсказку angular-ui для пользовательских событий
Я пытаюсь использовать функцию подсказки angular-ui, чтобы показать моему пользователю, что определенное поле недопустимо, но кажется, что подсказка может быть показана только на некоторых предопределенных триггерах. Есть ли способ, с помощью которого я могу вызвать подсказку, кроме этих триггеров?
например:
<input
type="text"
tooltip="Invalid name!"
tooltip-position="right"
tooltip-trigger="myForm.username.$invalid">
5 ответов:
вот такой трюк.
Twitter Bootstrap tooltips (что угловой-UI полагается на) есть возможность указать событие триггера с дополнительным атрибутом, как в
data-trigger="mouseenter". Это дает вам способ изменения триггера программно (с угловым):<input ng-model="user.username" name="username" tooltip="Some text" tooltip-trigger="{{{true: 'mouseenter', false: 'never'}[myForm.username.$invalid]}}" />когда
usernameдолларов недействительным,tooltip-triggerвыражение будет оценено как'mouseenter'и подсказка появится. В противном случае триггер будет иметь значение'never', который в свою очередь не запустите подсказку.EDIT:
@cotten (в комментариях) упоминает сценарий, в котором всплывающая подсказка застревает и не уходит, даже если модель действительна. Это происходит, когда мышь остается над полем ввода во время ввода текста (и модель становится допустимой). Как только проверка модели оценивается в true,
tooltip-triggerперейдет в "никогда".UI Bootstrap использует так называемый
triggerMapчтобы определить, на каких событиях мыши показывать / скрывать подсказка.// Default hide triggers for each show trigger var triggerMap = { 'mouseenter': 'mouseleave', 'click': 'click', 'focus': 'blur' };как вы можете видеть, эта карта ничего не знает о событии "никогда", поэтому она не может определить, когда закрыть подсказку. Таким образом, чтобы сделать трюк играть красиво нам нужно только обновить эту карту с нашей собственной пары событий и UI Bootstrap будет знать, какое событие наблюдать для закрытия всплывающей подсказки, когда
tooltip-triggerимеет значение "никогда".app.config(['$tooltipProvider', function($tooltipProvider){ $tooltipProvider.setTriggers({ 'mouseenter': 'mouseleave', 'click': 'click', 'focus': 'blur', 'never': 'mouseleave' // <- This ensures the tooltip will go away on mouseleave }); }]);Примечание: $ tooltip provider предоставляется пользовательский интерфейс.загрузчик.tooltip " модуль, и это позволяет нам глобально настроить наши подсказки в конфигурации приложения.
Я пробовал что-то другое
tooltip="{{(myForm.input1id.$invalid) ? 'You have an error with this field' : ''}}"таким образом, моя подсказка имеет только то, что написано, когда ввод недействителен, и если у него ничего не написано, подсказка не отображается.
начиная с версии 0.12.0 и далее,
tooltip-tiggerбольше не наблюдается (поэтому вы не можете изменить его программно).можно использовать
tooltip-enableчтобы получить такое же поведение. Смотрите дополнительную информацию здесь:https://github.com/angular-ui/bootstrap/issues/3372
вы также можете добавить
tooltip-enableвместоtooltip-triggerна своем поле.<input type="text" tooltip="Invalid name!" tooltip-position="right" tooltip-enable="{{myForm.username.$invalid}}">в этом случае, если имя пользователя является недопустимым ($invalid возвращает
true) появится подсказка.
в соответствии с новой версией документа я предлагаю использовать ниже HTML. ответ Стьюи не помогает с последней версией.
<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" />заменить только имя формы в
tooltip-is-open="formname.name.$invalid"вы хорошо идти.
Comments