Ne lisez ceci que si vous attribuez des info-bulles dynamiquement
c'est à dire <div tooltip={{ obj.somePropertyThatMayChange }} ...></div>
J'ai eu un problème avec les info-bulles dynamiques qui ne se mettaient pas toujours à jour avec la vue. Par exemple, je faisais quelque chose comme ceci:
Cela n'a pas fonctionné de manière cohérente
<div ng-repeat="person in people">
<span data-toggle="tooltip" data-placement="top" title="{{ person.tooltip }}">
{{ person.name }}
</span>
</div>
Et l'activer comme tel:
$timeout(function() {
$(document).tooltip({ selector: '[data-toggle="tooltip"]'});
}, 1500)
Cependant, comme mon tableau de personnes changerait, mes info-bulles ne seraient pas toujours mises à jour. J'ai essayé tous les correctifs de ce fil et d'autres sans succès. Le problème ne semblait se produire que dans 5% du temps et était presque impossible à répéter.
Malheureusement, ces info-bulles sont essentielles à la mission de mon projet et l'affichage d'une info-bulle incorrecte peut être très mauvais.
Ce qui semblait être le problème
Bootstrap copiait la valeur de la title
propriété dans un nouvel attribut data-original-title
et supprimait la title
propriété (parfois) lorsque j'activerais les info-bulles. Cependant, lorsque mon title={{ person.tooltip }}
changerait, la nouvelle valeur ne serait pas toujours mise à jour dans la propriété data-original-title
. J'ai essayé de désactiver les info-bulles et de les réactiver, de les détruire, de lier directement cette propriété ... tout. Cependant, chacun de ces éléments n'a pas fonctionné ou a créé de nouveaux problèmes; tels que les attributs title
et à la data-original-title
fois supprimés et non liés de mon objet.
Qu'est-ce qui a fonctionné
Peut-être le code le plus laid que j'ai jamais poussé, mais il a résolu ce petit mais substantiel problème pour moi. J'exécute ce code chaque fois que l'info-bulle est mise à jour avec de nouvelles données:
$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);
Ce qui se passe ici est essentiellement:
- Attendez un peu (1500 ms) pour que le cycle de digestion se termine, et le
title
s soient mis à jour.
- S'il y a une
title
propriété qui n'est pas vide (c'est-à-dire qu'elle a changé), copiez-la dans la data-original-title
propriété afin qu'elle soit récupérée par les toolips de Bootstrap.
- Réactiver les info-bulles
J'espère que cette longue réponse aidera quelqu'un qui a peut-être eu du mal comme moi.