仅当您动态分配工具提示时才阅读此内容
即<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 属性(有时)。但是,当我的title={{ person.tooltip }} 更改时,新值不会总是更新到属性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 毫秒),让摘要周期完成,然后更新
titles。
- 如果有一个不为空的
title 属性(即它已更改),请将其复制到data-original-title 属性中,以便Bootstrap 的工具栏将其拾取。
- 重新激活工具提示
希望这个长长的答案能帮助那些可能像我一样苦苦挣扎的人。