У меня есть простой и приятный код всплывающей подсказки (написанный кем-то другим), он отлично работает без углового, в отличие от него. Я думал о том, как лучше использовать его с угловатым. Вот код:Подсказка для углового, сервис/директива
$(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. Настоятельно рекомендуем читать [мышление в-angularjs-if-i-have-a-jquery-background] (http://stackoverflow.com/questions/14994391/thinking-in-angularjs-if-i-have-a-jquery -background) – charlietfl
Код, который управляет DOM, должен быть помещен в директиву. В директивах AngularJS используется расширенное подмножество jQuery, называемое [jqLite] (https://docs.angularjs.org/api/ng/function/angular.element#angular-s-jqlite). Рамка AngularJS автоматически заменит jqLite на jQuery, активированный с помощью jqLite Extras, если библиотека jQuery включена в библиотеку AngularJS. Для получения дополнительной информации см. [AngularJS angular.element API Reference] (https://docs.angularjs.org/api/ng/function/angular.element). – georgeawg