Я хочу отобразить интерактивный элемент (значок шрифта awesome), который копирует некоторые данные в буфер обмена. Когда происходит событие щелчка, я также хочу отобразить всплывающую подсказку, которая должна исчезнуть, как только курсор покинет (наведите указатель мыши) на элемент.
Этот элемент является директивой, так как я использую его несколько раз в своем приложении.
Копирование данных вообще не проблема, как и отображение всплывающей подсказки. Однако он не исчезает, когда мышь оставляет значок шрифта awesome.
Чтобы исправить это, сначала я установил для scope.tooltipIsOpen значение true, и, как и ожидалось, всплывающие подсказки отображались по умолчанию.
Затем я добавляю в код немного $log.info, чтобы посмотреть, не изменилось ли значение на false. Кажется, что значение обновлено. Я также проверил, были ли запущены события, и они есть. Я предполагаю, что представление не обновляется должным образом, поэтому всплывающая подсказка остается отображаемой. В конце концов я безуспешно пытался поместить область видимости. $apply() в функцию публикации.
Вот моя директива:
app.directive('toClipboard',
['$log', 'ngClipboard',
function ($log, ngClipboard) {
function compile(element, attrs) {
return {
pre: function (scope, element, attrs) {
if (!attrs.tooltipPlacement) {
attrs.tooltipPlacement = 'auto top';
}
},
post: function (scope, element) {
scope.copy = ngClipboard.toClipboard;
// Tooltip hidden by default.
scope.tooltipIsOpen = false;
// Hiding tooltip.
element.on('mouseenter', function () {
scope.tooltipIsOpen = false;
});
// Hiding tooltip.
element.on('mouseleave', function () {
scope.tooltipIsOpen = false;
});
}
}
}
return {
restrict: 'A',
replace: true,
scope: {
'clipboardData': '@',
'tooltipPlacement': '@'
},
compile: compile,
templateUrl: 'elements/_span-clipboard.html'
};
}
]);
NB: ngClipboard — это сервис для копирования данных в буфер обмена.
Вот связанный HTML-шаблон:
<span>
<i class="fa fa-copy clickable"
uib-tooltip="Copied"
tooltip-placement="tooltipPlacement"
tooltip-is-open="tooltipIsOpen"
tooltip-trigger="'click'"
ng-click="copy(clipboardData)"></i>
</span>
Есть ли у вас какие-либо идеи или какие-либо решения для решения этой проблемы?
Заранее спасибо,
Планкер: https://plnkr.co/edit/okzxdSz1VvbkycehMT2G?p=preview
'clipboardData': '@','tooltipPlacement': '@'
, попробуйте добавить нужные значения с двухсторонней привязкой. - person Aaron Rabinowitz   schedule 02.01.2019