这是一个技巧。
Twitter Bootstrap tooltips(Angular-UI 所依赖的)可以选择使用 data-trigger="mouseenter" 中的附加属性指定触发事件。这为您提供了一种以编程方式更改触发器的方法(使用 Angular):
<input
ng-model="user.username"
name="username"
tooltip="Some text"
tooltip-trigger="{{{true: 'mouseenter', false: 'never'}[myForm.username.$invalid]}}"
/>
所以当username 为$invalid 时,tooltip-trigger 表达式的计算结果为'mouseenter',并且工具提示将出现。否则,触发器将评估为'never',这反过来不会触发工具提示。
编辑:
@cotten(在 cmets 中)提到了工具提示卡住并且即使模型有效也不会消失的情况。当输入文本时鼠标停留在输入字段上时会发生这种情况(并且模型变为有效)。一旦模型验证评估为真,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
});
}]);
PLUNKER
注意:$tooltip 提供程序由“ui.bootstrap.tooltip”模块公开,它允许我们在应用配置中全局配置我们的工具提示。