下面是一組context菜單指令的一個非常基本的例子,其中菜單在主體中插入一次。
一個指令用於綁定contenxtmenu
事件並將數據發送到控制菜單本身的指令。
選擇的項目和鼠標位置得到的數據在廣播傳遞
HTML
<ul>
<li ng-repeat="item in items" context="item">{{item.title}}</li>
</ul>
<ul menu id="context" ng-show="menu_on">
<li ng-click="itemAlert('id')">Alert ID</li>
<li ng-click="itemAlert('title')">Alert Title</li>
</ul>
JS
app.directive('context', function($rootScope) {
return {
restrict: 'A',
scope: {
item: '=context'
},
link: function(scope, elem) {
elem.bind('contextmenu', function(evt) {
evt.preventDefault();
var data = {
pos: { x: evt.clientX, y: evt.clientY},
item: scope.item
}
scope.$apply(function(){
$rootScope.$broadcast('menu', data);
});
});
}
}
})
app.directive('menu', function($rootScope) {
return {
restrict: 'A',
link: function(scope, elem) {
scope.$on('menu', function(evt, data) {
scope.menu_on = true;
scope.item = data.item;
var cssObj = {
left: data.pos.x + 20 + 'px',
top: data.pos.y - 40 + 'px'
};
elem.css(cssObj)
});
scope.itemAlert = function(prop) {
scope.menu_on = false;
alert(scope.item[prop])
}
}
}
});
會需要一些額外的文件聽衆關閉菜單當用戶點擊在它之外。目標是創建能夠顯示菜單和傳遞數據的基本機制。
我還沒有看,但可能有一些開源指令已經可用,比這更先進。
DEMO
不會很難有插入體內偵聽鼠標位置和項目'x'的$ rootscope廣播一個ContextMenu指令。將另一個指令綁定到具有'contextmenu'事件處理程序的重複元素,並且廣播 – charlietfl
@charlietfl您能向我展示一個示例嗎?謝謝。 – user1027620
你可以使用已經可用的開源的contextmenu指令,或者你可以自己創建一個。檢查了這一點https://github.com/ianwalter/ng-context-menu,https://github.com/Wildhoney/ngContextMenu – PSL