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 titleproprietà in un nuovo attributo data-original-titlee rimuovendo la titleproprietà (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 iltitledata-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
titleproprietà che non è vuota (cioè è cambiata), data-original-titlecopiala 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.