仅当您动态分配工具提示时阅读
即 <div tooltip={{ obj.somePropertyThatMayChange }} ...></div>
我对动态工具提示有疑问,这些提示并非总是随视图更新。例如,我正在做这样的事情:
这并不一致
<div ng-repeat="person in people">
<span data-toggle="tooltip" data-placement="top" title="{{ person.tooltip }}">
{{ person.name }}
</span>
</div>
并这样激活它:
$timeout(function() {
$(document).tooltip({ selector: '[data-toggle="tooltip"]'});
}, 1500)
但是,随着人员阵列的更改,我的工具提示不会总是更新。我在此线程中尝试了所有修复程序,但没有运气。毛刺似乎只发生在大约5%的时间中,几乎不可能重现。
不幸的是,这些工具提示对我的项目至关重要,并且显示错误的工具提示可能非常糟糕。
似乎是什么问题
Bootstrap title
会将属性的值复制到新属性,data-original-title
并title
在我激活工具提示时(有时)删除该属性。但是,当my title={{ person.tooltip }}
更改时,新值将不会总是更新到property中data-original-title
。我尝试停用工具提示,然后重新激活它们,销毁它们,直接绑定到此属性...所有内容。但是,这些都不起作用或产生了新的问题。例如title
和data-original-title
属性都已从我的对象中删除并取消绑定。
做了什么
也许是我推过的最丑陋的代码,但是它为我解决了这个小而实质的问题。每当工具提示使用新数据更新时,我都会运行以下代码:
$timeout(function() {
$('[data-toggle="tooltip"]').each(function(index) {
// sometimes the title is blank for no apparent reason. don't override in these cases.
if ($(this).attr("title").length > 0) {
$( this ).attr("data-original-title", $(this).attr("title"));
}
});
$timeout(function() {
// finally, activate the tooltips
$(document).tooltip({ selector: '[data-toggle="tooltip"]'});
}, 500);
}, 1500);
本质上,这里发生的是:
- 等待一段时间(1500毫秒)以完成摘要周期,然后
title
更新。
- 如果某个
title
属性不为空(即已更改),则将其复制到该data-original-title
属性,以便Bootstrap的工具提示将其拾取。
- 重新激活工具提示
希望这个长答案能对像我一样一直挣扎的人有所帮助。