私はシンプルで素敵なツールチップコード(他人によって書かれています)を持っています。私は角度でそれを使うことができる最良の方法について考えてきました。ここでは、コードは次のようになります。角度、サービス/指示のツールチップ
$(document).ready(function() {
(function() {
var moveLeft = 0;
var moveDown = 0;
$('a.popper').hover(function (e) {
console.log("Here it is");
var target = '#' + ($(this).attr('data-popbox'));
$(target).show();
//moveLeft = $(this).outerWidth();
moveLeft = 15;
//moveDown = ($(target).outerHeight()/4);
moveDown = -15;
}, function() {
var target = '#' + ($(this).attr('data-popbox'));
$(target).hide();
});
$('a.popper').mousemove(function (e) {
console.log('mousemove');
var target = '#' + ($(this).attr('data-popbox'));
leftD = e.pageX + parseInt(moveLeft);
maxRight = leftD + $(target).outerWidth();
windowLeft = $(window).width() - 40;
windowRight = 0;
maxLeft = e.pageX - (parseInt(moveLeft) + $(target).outerWidth() + 20);
if (maxRight > windowLeft && maxLeft > windowRight) {
leftD = maxLeft;
}
topD = e.pageY - parseInt(moveDown);
maxBottom = parseInt(e.pageY + parseInt(moveDown) + 20);
windowBottom = parseInt(parseInt($(document).scrollTop()) + parseInt($(window).height()));
maxTop = topD;
windowTop = parseInt($(document).scrollTop());
if (maxBottom > windowBottom) {
topD = windowBottom - $(target).outerHeight() - 20;
} else if (maxTop < windowTop) {
topD = windowTop + 20;
}
$(target).css('top', topD).css('left', leftD);
});
})();
});
私はjQueryの上に含まれており、私はクロームコンソールでこのコードを注入した場合、それがすることになっている場合は、ツールチップが表示され、このコードがうまく機能することを心に留めておいてください。私は親切にもあなたに道を尋ねています。このコードは、おそらくサービス/工場で使われています。私が見ることができる唯一の問題は、私が知る限りでは、DOM論理をサービスや工場で書いてはいけません(間違っています)。私はそれを指示に入れようと考えていますが、それが正しいのかどうか、そしてどうすればそれができるのかは分かりません。
私はツールチップを使用していくつかのビューを持っているので、コントローラ全体にコード全体を入れることはできません。
これは本当に答えではなく、角度、ブートストラップはかなりきちんとツールチップがあります。https://angular-ui.github.io/bootstrap/#/tooltipを –
どれでもこのようなコードはディレクティブに入れる必要がありますが、jQueryの依存関係を持たないツールチップに使用できる角度モジュールは数多くあります。強く示唆していることを示唆しています。[j-j-if-i-have-a-jquery-background](http://stackoverflow.com/questions/14994391/thinking-in-angularjs-if-i-have-a-jquery -background) – charlietfl
DOMを操作するコードは、ディレクティブに置く必要があります。 AngularJSディレクティブは、[jqLite](https://docs.angularjs.org/api/ng/function/angular.element#angular-s-jqlite)というjQueryの拡張サブセットを使用します。 AngularJSライブラリは、jQueryライブラリがAngularJSライブラリの前に含まれている場合、jqLiteを自動的にjqLiteをjqLite Extrasで拡張されたjQueryに置き換えます。詳細については、[AngularJS angular.element APIリファレンス](https://docs.angularjs.org/api/ng/function/angular.element)を参照してください。 – georgeawg