#angularjs
#angularjs
Вопрос:
Я хочу закодировать директиву contextmenu для моего проекта. Прежде всего, создал пример контекстного меню в виде директивы angular JS:
var myApp = angular.module('myApp',[]);
myApp.directive("myContextMenu", function(){
restrict: 'AE',
replace: true,
template: "",
link: (scope, elem, attrs) ->
elem.bind "contextmenu", ->
scope.$apply ->
console.log "Right click to an item."
elem.bind "mouseleave", ->
elem.bind 'mouseover', ->
elem.css('cursor', 'pointer');
});
Вот мой пример HTML-файла:
<div ng-app>
<div my-context-menu>
Right click to display a context-menu
</div>
</div>
Когда я щелкаю правой кнопкой мыши по тексту, я хочу добавить некоторый div (например. Пример контекстного меню). Когда мышь покидает div, я хочу, чтобы пример контекстного меню был удален.
Каков правильный подход к этому. Должен ли я заполнить поле «шаблон» директивы? Должен ли я скрывать и показывать контекстное меню? Или я должен добавлять и удалять контекстное меню?
Любая помощь будет любезно оценена?
С уважением.
Ответ №1:
Взгляните на этот проект https://github.com/ianwalter/ng-context-menu
На мой взгляд, важно то, как вы определяете контекстное меню, и хорошим примером для размышления об этом является ng-repeat (таким образом, вам придется немного больше подумать о области видимости)
Я думаю, что определение встроенного меню было бы довольно чистым
то есть
<my-context-menu>
<ul>
<li>
<a ng-click="f()">Option 1</a>
</li>
<li>
<a ng-click="f()">Option 2</a>
</li>
</ul>
</my-context-menu>
таким образом, директива будет касаться только того, как отображается меню, а содержимое будет определено встроенным, и вы можете легко вызвать функцию в текущей области
Я считаю, что показывать / скрывать div было бы достаточно хорошо — возможно, когда у вас огромное количество элементов на странице и разные контекстные меню, создание div на лету было бы более подходящим
Ответ №2:
Я бы использовал более общий подход и сделал его повторно используемым для различных контроллеров. Подумайте о настраиваемой опции для добавления элементов в меню. Какие методы будут вызываться при нажатии на этот элемент — сделайте это также настраиваемым.
Также расположение контекстного меню, если меню отображается в правом углу и скрывается в окне — есть обнаружение на месте, чтобы сдвинуть меню влево.
Вы можете проверить тот, который я написал — https://github.com/shekhardesigner/Context-Menu-Angular-Directive