下面是一组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