У меня есть некоторый HTML-код, который в настоящее время заполняет поле выбора с помощью директивы ng-options
. Наша проблема в том, что ng-options не поддерживает использование всплывающих подсказок. Чтобы решить эту проблему, я пытаюсь написать пользовательскую директиву, но я новичок в AngularJS и TypeScript, поэтому я не уверен, куда идти оттуда, где я нахожусь.
Вот соответствующий код:
<select grid-column-tooltip class = "select-box" id = "availableColumn" size = "5"
ng-options = "column as column.localizedTitle for column in vm.availableColumns | filter: vm.environmentMatches track by column.field"
ng-model = "vm.availableColumnElement"
ng-dblclick = "vm.moveToSelectedColumns()">
<option value = "" ng-if = "false"></option>
</select>
В объекте column
есть поле с именем environmentLabel
, которое я хочу отображать в виде всплывающей подсказки при наведении курсора.
module psfc {
class GirdColumnTooltipDirective implements ng.IDirective {
restrict = 'A';
template = '<div class = "grid-column-tooltip">{{column.environmentLabel}}</div>';
constructor(
) { }
static directive = (): ng.IDirectiveFactory => {
return () => new GirdColumnTooltipDirective();
}
}
angular
.module('psfc')
.directive('gridColumnTooltip', GirdColumnTooltipDirective.directive());
}
Это, очевидно, очень неполное, потому что я не уверен, как реализовать то, что я хочу, в машинописном тексте. Я также не уверен, стоит ли превращать шаблон в div
, который появляется при наведении курсора, или найти способ добавить атрибут title
к соответствующему элементу option
.
Кроме того, в зависимости от решения, я пока не беспокоюсь о CSS. Я могу исправить любые проблемы со стилем позже.
Это и то, и другое. AngularJS может быть TypeScript или чистым Javascript. В этом случае я бы хотел использовать AngularJS для TypeScript.
Поскольку вы новичок в AngularJS, рассмотрите возможность использования настраиваемых плагинов выбора, потому что работа с ng-options будет либо слишком сложной, либо результат будет полон ошибок. И этот вопрос касается AngularJS, а не TypeScript, поэтому, пожалуйста, удалите тег typescript
.
Вы рассматривали возможность использования $uibpopover из начальной загрузки?
Для простоты мы просто заменили ng-options
на использование ng-repeat
внутри select
. Гораздо проще, чем писать пользовательскую директиву.
<select class = "select-box" id = "availableColumn" size = "5"
ng-dblclick = "vm.moveToSelectedColumns()">
<option ng-repeat = "column in vm.availableColumns | filter: vm.environmentMatches track by column.field"
value = "column.field"
ng-click = "vm.availableColumnElement = column"
title = "{{column.localizedTitle}}">
{{column.localizedTitle}}
</option>
</select>
Обратите внимание, что тег option
не поддерживает атрибут title
. Даже если он работает в некоторых браузерах, он не соответствует стандарту и не все браузеры его поддерживают. Например, Edge не показывает заголовок.
Я понимаю, что это не стандарт, поскольку option
является неполной частью элемента select
, но после тестирования оказалось, что он работает во всех поддерживаемых нами браузерах (включая Edge и IE).
Почему вы помечаете TypeScript? Если это AngularJS, это Javascript, а не TypeScript. Вы можете получить лучшую помощь с правильными тегами.