2013-03-28 7 views
7

私は理解できないような小さな問題にぶつかっています。以下のコードは、初めてリンク上にカーソルを置いた場合を除いて動作します。どんな助けでも大歓迎です。

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

それは、各マウスオーバー時にロードする必要がありますか?これは動作しますか:http://jsfiddle.net/ZsMY4? – jkoreska

+0

@jkoreskaツールチップのデータを使用するので、マウスオーバーするたびに読み込む必要があります。 – anazimok

+0

さて、少なくともキャッシュすることを検討するとよいでしょう。これはどうですか:http://jsfiddle.net/ZsMY4/1? – jkoreska

答えて

4

[OK]をので、私たちはそれを変更することはできませんAJAX呼び出しは良いアイデアのように見えるかもしれません前.tooltip()を呼び出しますが、その内部変数にメソッドのコピーdata-original-titleまたは'title': (。

これは、呼び出すツールチップ()はonmouseoverイベントを聴くだけです。.tooltip('show')を呼び出して、プログラムで表示させる必要があります。

012ここで

は作業フィドルです:http://jsfiddle.net/rB5zT/49/

は、これはそれを行うための正しい方法である:

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

問題は、初めてツールチップにカーソルを合わせると、デフォルトテキストが表示されることです。私の目標は、誰かがリンクを乗り越えるたびにxhr経由でコンテンツを読み込むことでした。 – anazimok

+0

OK、ここでそれを行う方法です。回避策のように思えるかもしれませんが、ツールチップの実際の値を取得するにはhttpリクエストを行う必要があります。うまくいきたいです。 – victor

+1

これは動作するバージョンです。 ajaxレスポンスで 'tooltip( 'show')'を呼ぶ必要があります:)。 – victor

関連する問題