Lesen Sie dies nur, wenn Sie QuickInfos dynamisch zuweisen
dh <div tooltip={{ obj.somePropertyThatMayChange }} ...></div>
Ich hatte ein Problem mit dynamischen Tooltips, die nicht immer mit der Ansicht aktualisiert wurden. Zum Beispiel habe ich so etwas gemacht:
Dies funktionierte nicht konsequent
<div ng-repeat="person in people">
<span data-toggle="tooltip" data-placement="top" title="{{ person.tooltip }}">
{{ person.name }}
</span>
</div>
Und aktivieren Sie es so:
$timeout(function() {
$(document).tooltip({ selector: '[data-toggle="tooltip"]'});
}, 1500)
Da sich mein People-Array jedoch ändern würde, würden meine Tooltips nicht immer aktualisiert. Ich habe jede Korrektur in diesem Thread und anderen ohne Glück versucht. Der Fehler schien nur in etwa 5% der Fälle aufzutreten und war fast unmöglich zu wiederholen.
Leider sind diese Tooltips für mein Projekt von entscheidender Bedeutung, und das Anzeigen eines falschen Tooltips kann sehr schlecht sein.
Was schien das Problem zu sein
Bootstrap kopierte den Wert der title
Eigenschaft in ein neues Attribut data-original-title
und entfernte die title
Eigenschaft (manchmal), wenn ich die Tooltips aktivierte. Wenn sich jedoch mein title={{ person.tooltip }}
Wert ändert, wird der neue Wert nicht immer in der Eigenschaft aktualisiert data-original-title
. Ich habe versucht, die Tooltips zu deaktivieren und zu reaktivieren, zu zerstören und direkt an diese Eigenschaft zu binden ... alles. Jedes dieser Verfahren hat jedoch entweder nicht funktioniert oder neue Probleme verursacht. wie die title
unddata-original-title
Attribute beide und von meinem Objekt ungebundene entfernt werden.
Was hat funktioniert?
Vielleicht der hässlichste Code, den ich je gepusht habe, aber er hat dieses kleine, aber erhebliche Problem für mich gelöst. Ich führe diesen Code jedes Mal aus, wenn der Tooltip mit neuen Daten aktualisiert wird:
$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);
Was hier im Wesentlichen passiert, ist:
- Warten Sie einige Zeit (1500 ms), bis der Digest-Zyklus abgeschlossen ist
title
s aktualisiert ist.
- Wenn eine
title
Eigenschaft nicht leer ist (dh geändert wurde), kopieren Sie sie in die data-original-title
Eigenschaft, damit sie von den Bootstrap-Toolips übernommen wird.
- Reaktivieren Sie die Tooltips
Hoffe, diese lange Antwort hilft jemandem, der vielleicht so gekämpft hat wie ich.