Leggilo solo se assegni i suggerimenti in modo dinamico
cioè <div tooltip={{ obj.somePropertyThatMayChange }} ...></div>
Ho avuto un problema con i suggerimenti dinamici che non venivano sempre aggiornati con la vista. Ad esempio, stavo facendo qualcosa del genere:
Questo non ha funzionato in modo coerente
<div ng-repeat="person in people">
<span data-toggle="tooltip" data-placement="top" title="{{ person.tooltip }}">
{{ person.name }}
</span>
</div>
E attivandolo in questo modo:
$timeout(function() {
$(document).tooltip({ selector: '[data-toggle="tooltip"]'});
}, 1500)
Tuttavia, poiché il mio array di persone cambiava, i miei suggerimenti non si aggiornavano sempre. Ho provato ogni correzione in questo thread e in altri senza fortuna. Il problema tecnico sembrava verificarsi solo circa il 5% delle volte ed era quasi impossibile ripeterlo.
Sfortunatamente, questi suggerimenti sono fondamentali per il mio progetto e mostrare un suggerimento errato potrebbe essere molto negativo.
Quale sembrava essere il problema
Bootstrap stava copiando il valore della title
proprietà in un nuovo attributo data-original-title
e rimuovendo la title
proprietà (a volte) quando avrei attivato i toooltips. Tuttavia, quando my title={{ person.tooltip }}
cambiava, il nuovo valore non veniva sempre aggiornato nella proprietà data-original-title
. Ho provato a disattivare i tooltip e riattivarli, distruggendoli, legandomi direttamente a questa proprietà ... tutto. Tuttavia, ognuno di questi non ha funzionato o ha creato nuovi problemi; come iltitle
data-original-title
attributi e entrambi rimossi e non associati dal mio oggetto.
Cosa ha funzionato
Forse il codice più brutto che abbia mai inserito, ma ha risolto questo piccolo ma sostanziale problema per me. Eseguo questo codice ogni volta che il suggerimento viene aggiornato con nuovi dati:
$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);
Quello che sta succedendo qui in sostanza è:
- Attendi un po 'di tempo (1500 ms) per il completamento del ciclo di digest e il file
title
aggiornamento dei messaggi di posta elettronica.
- Se c'è una
title
proprietà che non è vuota (cioè è cambiata), data-original-title
copiala nella proprietà in modo che venga rilevata dai suggerimenti di Bootstrap.
- Riattiva i suggerimenti
Spero che questa lunga risposta aiuti qualcuno che potrebbe aver lottato come me.