ツールチップを動的に割り当てる場合にのみこれを読んでください
すなわち <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%だけで発生しているようで、繰り返すことはほとんど不可能でした。
残念ながら、これらのツールチップは私のプロジェクトにとってミッションクリティカルであり、誤ったツールチップを表示することは非常に悪い場合があります。
問題と思われたもの
ブートストラップは、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);
ここで本質的に何が起こっているのですか:
- ダイジェストサイクルが完了し、
title
sが更新されるまでしばらく待ちます(1500 ms)。
- ある場合
title
(すなわち、それは変更されている)空でない性質は、それをコピーしdata-original-title
、それがブートストラップのtoolipsによってピックアップされるようにプロパティ。
- ツールチップを再アクティブ化する
この長い答えが、私がそうであったように苦労していた誰かを助けることを願っています。