2013-03-28 2 views
7

Sto correndo in un piccolo problema che non riesco a capire. Il codice seguente funziona, tranne che per la prima volta che si passa il mouse sopra il collegamento. Qualsiasi aiuto è molto apprezzato.

http://jsfiddle.net/LpK6d/1/

<div ng-app="myApp"> 
<a 
    class="pop-over" 
    data-original-title="default value" 
    data-placement="top">test link</a> 
</div> 
var app = angular.module("myApp", []); 

app.directive('popOver', function($http) { 
    return { 
    restrict: 'C', 
    link: function(scope, element, attr) { 

     element.bind('mouseover', function(e) { 
      $http.get("http://ip.jsontest.com/?callback=someFunction") 
       .success(function(data) { 
       attr.$set('originalTitle', data); 
       element.tooltip();     
       }); 
      }) 
     } 
    } 
}); 
+0

Ha bisogno di caricare su ogni passaggio del mouse? Funzionerebbe: http://jsfiddle.net/ZsMY4? – jkoreska

+0

@jkoreska Ha bisogno di caricare su ogni mouseover, perché io uso i dati per il suggerimento. – anazimok

+0

Ok, potresti prendere in considerazione la memorizzazione nella cache almeno. Come è questo: http://jsfiddle.net/ZsMY4/1? – jkoreska

risposta

4

Ok, quindi chiamando .tooltip() prima della chiamata AJAX potrebbe sembrare una buona idea, ma il metodo copia il data-original-title o 'title' nelle sue variabili interne, quindi non si può cambiare: (.

la cosa è che tooltip di chiamata() ascolta solo gli eventi onmouseover. È necessario chiamare .tooltip('show') per farlo apparire a livello di codice.

Ecco il violino di lavoro: http://jsfiddle.net/rB5zT/49/

Questo è il modo corretto per farlo:

var app = angular.module("myApp", []) 
app.directive('popOver', function($http) { 
return { 
    restrict: 'C', 
    link: function(scope, element, attr) { 
    var i =0; 
    element.tooltip(); 
    $(element).bind('mouseover',function(e) { 

     $http.get("test").success(function(){ 
      attr.$set('originalTitle', "Some text "+i++); 
      element.tooltip('show'); 
     }); 
     }); 
    } 
} 
}); 
+0

il problema è che la prima volta che si passa il mouse sopra il suggerimento, viene visualizzato il testo predefinito. Il mio obiettivo era caricare il contenuto tramite xhr ogni volta che qualcuno passa il mouse sopra il link. – anazimok

+0

OK, ecco il modo per farlo. Potrebbe sembrare un work-around, ma devi fare una richiesta http per ottenere il valore reale del tooltip. Spero che aiuti – victor

+1

Questa è la versione funzionante. Devi chiamare 'tooltip ('show')' su una risposta ajax :). – victor