J'essaie d'utiliser l'info-bulle Bootstrap dans une de mes applications. Mon application utilise AngularJS Actuellement, j'ai les éléments suivants:
<button type="button" class="btn btn-default"
data-toggle="tooltip" data-placement="left"
title="Tooltip on left">
Tooltip on left
</button>
Je pense que j'ai besoin d'utiliser
$("[data-toggle=tooltip]").tooltip();
Cependant, je ne suis pas sûr. Même lorsque j'ajoute la ligne ci-dessus, mon code ne fonctionne pas. J'essaie d'éviter d'utiliser le bootstrap de l'interface utilisateur car il en a plus que ce dont j'ai besoin. Cependant, si je devais inclure uniquement la partie de l'info-bulle, je serais ouvert à cela. Pourtant, je ne peux pas comprendre comment faire cela.
Quelqu'un peut-il me montrer comment faire fonctionner l'info-bulle Bootstrap avec AngularJS?
angularjs
twitter-bootstrap
twitter-bootstrap-tooltip
user2871401
la source
la source
Réponses:
Pour que les info-bulles fonctionnent en premier lieu, vous devez les initialiser dans votre code. En ignorant AngularJS pendant une seconde, voici comment faire fonctionner les info-bulles dans jQuery:
Cela fonctionnera également dans une application AngularJS tant que ce n'est pas du contenu rendu par Angular (par exemple: ng-repeat). Dans ce cas, vous devez écrire une directive pour gérer cela. Voici une directive simple qui a fonctionné pour moi:
Il ne vous reste plus qu'à inclure l'attribut "info-bulle" sur l'élément sur lequel vous voulez que l'info-bulle apparaisse:
J'espère que cela pourra aider!
la source
$(element).tooltip({html: 'true', container: 'body'})
avant d'appeler une info-bulle comme exemple sur la fourniture d'options personnalisées.element.tooltip()
peut être utilisé à la place de jQuery.La meilleure solution que j'ai pu trouver est d'inclure un attribut "onmouseenter" sur votre élément comme ceci:
la source
Réponse simple - en utilisant UI Bootstrap ( ui.bootstrap.tooltip )
Il semble y avoir un tas de réponses très complexes à cette question. Voici ce qui a fonctionné pour moi.
Installer UI Bootstrap -
$ bower install angular-bootstrap
Injecter UI Bootstrap en tant que dépendance -
angular.module('myModule', ['ui.bootstrap']);
Utilisez la directive uib-tooltip dans votre html.
la source
Si vous créez une application angulaire, vous pouvez utiliser jQuery, mais il y a beaucoup de bonnes raisons d'essayer de l'éviter en faveur de paradigmes plus angulaires. Vous pouvez continuer à utiliser les styles fournis par bootstrap, mais remplacez les plugins jQuery par angular natif en utilisant UI Bootstrap
Incluez les fichiers CSS Boostrap, Angular.js et ui.Bootstrap.js:
Assurez-vous d'avoir injecté
ui.bootstrap
lorsque vous créez votre module comme ceci:Ensuite, vous pouvez utiliser des directives angulaires au lieu d'attributs de données récupérés par jQuery:
Démo dans Plunker
Éviter le bootstrap de l'interface utilisateur
jQuery.min.js (94kb) + Bootstrap.min.js (32kb) vous donne également plus que ce dont vous avez besoin, et bien plus que ui-bootstrap.min.js (41kb) .
Et le temps passé à télécharger les modules n'est qu'un aspect des performances.
Si vous voulez vraiment charger uniquement les modules dont vous avez besoin, vous pouvez "Créer une construction" et choisir des info-bulles sur le site Web Bootstrap-UI . Ou vous pouvez explorer le code source pour les info-bulles - et choisir ce dont vous avez besoin.
Voici une version personnalisée minifiée avec juste les infobulles et les modèles (6 Ko)
la source
Avez-vous inclus Bootstrap JS et jQuery?
Si vous ne les chargez pas déjà, l'interface utilisateur angulaire ( http://angular-ui.github.io/bootstrap/ ) ne sera peut-être pas très lourde. Je l'utilise avec mon application Angular, et elle a une directive Tooltip. Essayez d'utiliser
tooltip="tiptext"
la source
J'ai écrit une directive angulaire simple qui fonctionne bien pour nous.
Voici une démo: http://jsbin.com/tesido/edit?html,js,output
Directive (pour Bootstrap 3) :
Remarque: Si vous utilisez Bootstrap 4, aux lignes 6 et 11 ci-dessus, vous devrez remplacer
tooltip('destroy')
partooltip('dispose')
(Merci à user1191559 pour cette mise à jour )Ajoutez simplement
bootstrap-tooltip
comme attribut à n'importe quel élément avec untitle
. Angular surveillera les modifications apportées autitle
mais sinon transmettra la gestion de l'info-bulle à Bootstrap.Cela vous permet également d'utiliser l'une des options d'infobulle Bootstrap natives comme
data-
attributs de la manière normale Bootstrap.Balisage :
Clairement, cela n'a pas toutes les liaisons élaborées et l'intégration avancée qu'offrent AngularStrap et UI Bootstrap, mais c'est une bonne solution si vous utilisez déjà le JS de Bootstrap dans votre application Angular et que vous avez juste besoin d'un pont d'info-bulles de base sur toute votre application sans modifier les contrôleurs ou gérer les événements de souris.
la source
Error: cannot call methods on tooltip prior to initialization; attempted to call method 'destroy'
erreur.element.tooltip('destroy');
avecelement.tooltip('dispose');
aux deux endroits.Vous pouvez utiliser l'
selector
option pour les applications dynamiques d'une seule page:la source
Vous pouvez créer une directive simple comme celle-ci:
Ensuite, ajoutez votre directive personnalisée si nécessaire:
la source
Vous pouvez le faire avec AngularStrap qui
Vous pouvez injecter toute la bibliothèque comme ceci:
Ou tirez uniquement sur la fonction d'info-bulle comme ceci:
Démo dans Stack Snippets
la source
moyen le plus simple, ajoutez
$("[data-toggle=tooltip]").tooltip();
au contrôleur concerné.la source
la source
N'oubliez pas qu'une chose si vous souhaitez utiliser l'info-bulle d'amorçage dans angularjs est l'ordre de vos scripts si vous utilisez également jquery-ui, cela devrait être:
Il a fait ses preuves
la source
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
Et l'activer comme tel:
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 attributdata-original-title
et supprimait latitle
propriété (parfois) lorsque j'activerais les info-bulles. Cependant, lorsque montitle={{ 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 attributstitle
et à ladata-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:
Ce qui se passe ici est essentiellement:
title
s soient mis à jour.title
propriété qui n'est pas vide (c'est-à-dire qu'elle a changé), copiez-la dans ladata-original-title
propriété afin qu'elle soit récupérée par les toolips de Bootstrap.J'espère que cette longue réponse aidera quelqu'un qui a peut-être eu du mal comme moi.
la source
Essayez l'info-bulle (ui.bootstrap.tooltip). Voir les directives angulaires pour Bootstrap
<button type="button" class="btn btn-default" tooltip-placement="bottom" uib-tooltip="tooltip message">Test</button>
Il est recommandé d'éviter le code JavaScript en haut d'AngularJS
la source
pour obtenir des info-bulles à actualiser lorsque le modèle change , j'utilise simplement
data-original-title
au lieu detitle
.par exemple
<i class="fa fa-gift" data-toggle="tooltip" data-html="true" data-original-title={{getGiftMessage(gift)}} ></i>
notez que j'initialise l'utilisation des infobulles comme celle-ci:
versions:
la source
AngularStrap ne fonctionne pas dans IE8 avec angularjs version 1.2.9 donc ne l'utilisez pas si votre application doit prendre en charge IE8
la source
Impproving @aStewartDesign réponse:
Il n'y a pas besoin de jquery, c'est une réponse tardive, mais je me suis dit que c'est celui qui a été le plus voté, je devrais le souligner.
la source
installez les dépendances:
ensuite, ajoutez des scripts dans votre angular-cli.json
puis, créez un script.js
redémarrez maintenant votre serveur.
la source
En raison de la fonction d'info-bulle, vous devez indiquer à angularJS que vous utilisez jQuery.
Voici votre directive:
et voici comment utiliser la directive:
la source