在自定义事件上启用angular-ui工具提示

我试图使用angular-ui的工具提示function来显示我的用户一个特定的字段是无效的,但似乎工具提示只能显示在一些预定义的触发器。 有什么办法可以触发工具提示,除了这些触发器?

例如:

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

这是一个窍门。

Twitter Bootstrap工具提示 (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是$无效时, tooltip-triggerexpression式将会被计算为'mouseenter' ,工具提示会显示出来。 否则,触发器将评估为'never' ,作为回报将不会触发工具提示。

编辑:

@comten(在评论中)提到了一个场景,工具提示卡住了,即使模型有效也不会消失。 发生这种情况时,鼠标留在input字段input文本(和模型变得有效)。 只要模型validation评估为真, tooltip-trigger将切换到“从不”。

UI引导使用一个所谓的triggerMap来确定显示/隐藏工具提示的鼠标事件。

 // Default hide triggers for each show trigger var triggerMap = { 'mouseenter': 'mouseleave', 'click': 'click', 'focus': 'blur' }; 

正如你所看到的,这张地图对“永不”事件一无所知,所以无法确定何时closures工具提示。 所以,为了使特技播放更好,我们只需要用我们自己的事件对来更新这张地图,然后UI Bootstrap就会知道在工具tooltip-trigger设置为“never”时closures工具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 provider由“ui.bootstrap.tooltip”模块公开,它允许我们在appconfiguration中全局configuration我们的工具提示。

我尝试了不同的东西

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

这样,我的工具提示只有input无效时写入的东西,如果没有写入任何东西,工具提示不显示。

从版本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}}"> 

在这种情况下,如果用户名无效($无效返回true ),将出现工具提示。

根据新版本的文件,我会build议使用下面的HTML。 stewie的答案是没有帮助的最新版本。

 <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"replace您的表单名称

你已准备好出发。